Hướng dẫn how do i assign a value to a variable in mysql trigger? - làm cách nào để gán giá trị cho một biến trong trình kích hoạt mysql?

0

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi tạo trình kích hoạt MySQL và khai báo một biến. Sau đó, tôi có một số nếu điều kiện. bên trong nếu không thể được đặt giá trị thành bên được khai báo đó của IF. Nó có thể? Bởi vì tôi cần dữ liệu biến đó đến các chức năng khác. Tôi luôn nhận được vô giá trị.

Đây là truy vấn cài đặt mã mẫu của tôi nhận được giá trị khi nó thực thi

delimiter $$
CREATE TRIGGER Table1INSERTCustomer
    AFTER INSERT ON Table1
    FOR EACH ROW

BEGIN

DECLARE CustomerId integer;

IF (SELECT CustomerID FROM Seller WHERE Id = NEW.ResellerID AND CustomerID IS NOT NULL) 
THEN 
BEGIN

SET @CustomerId := (SELECT CustomerID FROM Seller WHERE Id = NEW.ResellerID LIMIT 1); <-- This is Problem

END; 
END IF;

END; 
$$ 

Cảm ơn rât nhiều

hỏi ngày 13 tháng 1 năm 2020 lúc 3:34Jan 13, 2020 at 3:34

Hướng dẫn how do i assign a value to a variable in mysql trigger? - làm cách nào để gán giá trị cho một biến trong trình kích hoạt mysql?

4

Mô hình hóa ví dụ.

create table test1 (id int, val int);
insert into test1 values (1,11), (2,22);
select * from test1;
id | val
-: | --:
 1 |  11
 2 |  22
create table test2 (id int, val int);
create trigger tr 
after insert on test2
for each row
select test1.val into @var 
from test1 
where test1.id = NEW.id;
insert into test2 values (1,111);
select * from test1;
id | val
-: | --:
 1 |  11
 2 |  22
create table test1 (id int, val int);
0
create table test1 (id int, val int);
1
create table test1 (id int, val int);
2
create table test1 (id int, val int);
3

DBFiddle ở đây

Nghiên cứu. Ứng dụng.

Đã trả lời ngày 13 tháng 1 năm 2020 lúc 8:27Jan 13, 2020 at 8:27

Hướng dẫn how do i assign a value to a variable in mysql trigger? - làm cách nào để gán giá trị cho một biến trong trình kích hoạt mysql?

AkinaakinaAkina

34,7K5 Huy hiệu vàng13 Huy hiệu bạc21 Huy hiệu đồng5 gold badges13 silver badges21 bronze badges

Tôi có một bảng ước tính và bảng ước tính_line_items. Tôi đang cố gắng cập nhật bảng ước tính bất cứ khi nào một mục con của con đó thay đổi. Tôi tiếp tục chạy vào một lỗi cú pháp. Lỗi không mô tả lắm ("Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ Mariadb của bạn"). Có vẻ như tôi đang làm hỏng việc thiết lập các giá trị biến.

create table test1 (id int, val int);
4

Chỉnh sửa: Tôi cũng đã thử đặt các biến như thế này, với cùng một kết quả:

select * from test1;
1

Hỏi ngày 12 tháng 8 năm 2017 lúc 3:27Aug 12, 2017 at 3:27

1

Bạn nghĩ thế nào về ...

create table test1 (id int, val int);
5

Đã trả lời ngày 12 tháng 8 năm 2017 lúc 10:11Aug 12, 2017 at 10:11

Hướng dẫn how do i assign a value to a variable in mysql trigger? - làm cách nào để gán giá trị cho một biến trong trình kích hoạt mysql?

Stefanstefanstefan

2.4371 Huy hiệu vàng8 Huy hiệu bạc10 Huy hiệu đồng1 gold badge8 silver badges10 bronze badges

1

13.7.4.1 & nbsp; Đặt cú pháp để gán biến

create table test1 (id int, val int);
6

select * from test1;
2 Cú pháp để gán biến cho phép bạn gán các giá trị cho các loại biến khác nhau ảnh hưởng đến hoạt động của máy chủ hoặc máy khách:

  • Các biến do người dùng xác định. Xem Phần & NBSP; 9.4, các biến do người dùng xác định.

  • Các tham số thủ tục và chức năng được lưu trữ, và các biến cục bộ của chương trình được lưu trữ. Xem Phần & NBSP; 13.6.4, các biến trong các chương trình được lưu trữ.

  • Biến hệ thống. Xem Phần & NBSP; 5.1.7, Biến hệ thống máy chủ của Cameron. Các biến hệ thống cũng có thể được đặt tại máy chủ khởi động, như được mô tả trong Phần & NBSP; 5.1.8, Sử dụng các biến hệ thống.

Một câu lệnh

select * from test1;
2 gán các giá trị biến không được ghi vào nhật ký nhị phân, do đó, trong các kịch bản sao chép, nó chỉ ảnh hưởng đến máy chủ mà bạn thực thi nó. Để ảnh hưởng đến tất cả các máy chủ sao chép, thực thi câu lệnh trên mỗi máy chủ.

Các phần sau đây mô tả cú pháp

select * from test1;
2 để cài đặt các biến. Họ sử dụng toán tử gán
select * from test1;
5, nhưng toán tử gán
select * from test1;
6 cũng được phép cho mục đích này.

  • Phân công biến do người dùng xác định

  • Tham số và phân công biến cục bộ

  • Phân công biến hệ thống

  • Đặt xử lý lỗi

  • Nhiều gán biến

  • Tài liệu tham khảo biến hệ thống trong các biểu thức

Phân công biến do người dùng xác định

Tham số và phân công biến cục bộ

Phân công biến hệ thống

Đặt xử lý lỗi

Nhiều gán biến

create table test1 (id int, val int);
8

Các biến do người dùng xác định được tạo cục bộ trong một phiên và chỉ tồn tại trong bối cảnh của phiên đó; Xem Phần & NBSP; 9.4, các biến do người dùng xác định.

Một biến do người dùng xác định được viết là

select * from test1;
7 và được gán giá trị biểu thức như sau:

Tham số và phân công biến cục bộ

Phân công biến hệ thống

create table test1 (id int, val int);
9

Phân công biến hệ thống

Đặt xử lý lỗi

Nếu bạn thay đổi biến hệ thống phiên, giá trị vẫn có hiệu lực trong phiên của bạn cho đến khi bạn thay đổi biến thành một giá trị khác hoặc phiên kết thúc. Sự thay đổi không có tác dụng đối với các phiên khác.

Nếu bạn thay đổi biến hệ thống toàn cầu, giá trị được ghi nhớ và sử dụng để khởi tạo giá trị phiên cho các phiên mới cho đến khi bạn thay đổi biến thành một giá trị khác hoặc máy chủ thoát. Thay đổi có thể nhìn thấy cho bất kỳ khách hàng nào truy cập giá trị toàn cầu. Tuy nhiên, thay đổi chỉ ảnh hưởng đến giá trị phiên tương ứng cho các máy khách kết nối sau khi thay đổi. Thay đổi biến toàn cầu không ảnh hưởng đến giá trị phiên cho bất kỳ phiên khách hàng hiện tại nào (thậm chí không có phiên trong đó thay đổi giá trị toàn cầu xảy ra).

Ghi chú

Đặt giá trị biến hệ thống toàn cầu luôn yêu cầu các đặc quyền đặc biệt. Đặt giá trị biến hệ thống phiên thường không yêu cầu đặc quyền đặc biệt và có thể được thực hiện bởi bất kỳ người dùng nào, mặc dù có các ngoại lệ. Để biết thêm thông tin, xem Phần & NBSP; 5.1.8.1, Đặc quyền biến hệ thống của hệ thống.

Các cuộc thảo luận sau đây mô tả các tùy chọn cú pháp để thiết lập các biến hệ thống:

  • Để gán giá trị cho biến hệ thống toàn cầu, đi trước tên biến bằng từ khóa

    id | val
    -: | --:
     1 |  11
     2 |  22
    
    4 hoặc vòng loại
    id | val
    -: | --:
     1 |  11
     2 |  22
    
    5:

    insert into test1 values (1,11), (2,22);
    
    0
  • Để gán một giá trị cho biến hệ thống phiên, đi trước tên biến bằng từ khóa

    id | val
    -: | --:
     1 |  11
     2 |  22
    
    6 hoặc
    id | val
    -: | --:
     1 |  11
     2 |  22
    
    7, bằng vòng loại
    id | val
    -: | --:
     1 |  11
     2 |  22
    
    8,
    id | val
    -: | --:
     1 |  11
     2 |  22
    
    9 hoặc
    create table test2 (id int, val int);
    
    0 hoặc không có từ khóa hoặc không có trình sửa đổi nào cả:

    insert into test1 values (1,11), (2,22);
    
    1

    Một khách hàng có thể thay đổi các biến phiên của chính mình, nhưng không phải của bất kỳ ứng dụng khách nào khác.

Để đặt giá trị biến hệ thống toàn cầu thành giá trị mặc định của MySQL được biên dịch hoặc biến hệ thống phiên thành giá trị toàn cầu tương ứng hiện tại, hãy đặt biến thành giá trị

create table test2 (id int, val int);
1. Ví dụ: hai câu sau đây giống hệt nhau trong việc đặt giá trị phiên của
create table test2 (id int, val int);
2 thành giá trị toàn cầu hiện tại:

insert into test1 values (1,11), (2,22);
2

Để hiển thị tên và giá trị biến hệ thống:

  • Sử dụng câu lệnh

    create table test2 (id int, val int);
    
    3; Xem Phần & NBSP; 13.7.5.39, Câu lệnh Biến hiển thị.

  • Một số bảng lược đồ hiệu suất cung cấp thông tin biến hệ thống. Xem Phần & NBSP; 25.12.13, Biến số hệ thống Lược đồ hiệu suất.

Đặt xử lý lỗi

Nếu bất kỳ gán biến nào trong câu lệnh

select * from test1;
2 không thành công, toàn bộ câu lệnh không thành công và không có biến nào được thay đổi.

select * from test1;
2 tạo ra một lỗi trong các trường hợp được mô tả ở đây. Hầu hết các ví dụ hiển thị các câu lệnh
select * from test1;
2 sử dụng cú pháp từ khóa (ví dụ:
id | val
-: | --:
 1 |  11
 2 |  22
4 hoặc
id | val
-: | --:
 1 |  11
 2 |  22
6), nhưng các nguyên tắc cũng đúng đối với các câu lệnh sử dụng các sửa đổi tương ứng (ví dụ:
id | val
-: | --:
 1 |  11
 2 |  22
5 hoặc
id | val
-: | --:
 1 |  11
 2 |  22
8).

  • Sử dụng

    select * from test1;
    
    2 (bất kỳ biến thể nào) để đặt biến chỉ đọc:

    insert into test1 values (1,11), (2,22);
    
    3
  • Sử dụng

    id | val
    -: | --:
     1 |  11
     2 |  22
    
    4 để đặt một biến chỉ có giá trị phiên:

    insert into test1 values (1,11), (2,22);
    
    4
  • Sử dụng

    id | val
    -: | --:
     1 |  11
     2 |  22
    
    6 để đặt một biến chỉ có giá trị toàn cầu:

    insert into test1 values (1,11), (2,22);
    
    5
  • Thiếu sót của

    id | val
    -: | --:
     1 |  11
     2 |  22
    
    4 để đặt một biến chỉ có giá trị toàn cầu:

    insert into test1 values (1,11), (2,22);
    
    6
  • Bộ điều chỉnh

    id | val
    -: | --:
     1 |  11
     2 |  22
    
    5,
    id | val
    -: | --:
     1 |  11
     2 |  22
    
    8 và
    create table test2 (id int, val int);
    
    0 chỉ áp dụng cho các biến hệ thống. Một lỗi xảy ra đối với các nỗ lực áp dụng chúng cho các biến do người dùng xác định, thủ tục được lưu trữ hoặc tham số chức năng hoặc các biến cục bộ chương trình được lưu trữ.

  • Không phải tất cả các biến hệ thống có thể được đặt thành

    create table test2 (id int, val int);
    
    1. Trong những trường hợp như vậy, việc gán
    create table test2 (id int, val int);
    
    1 dẫn đến một lỗi.

  • Một lỗi xảy ra đối với các nỗ lực gán

    create table test2 (id int, val int);
    
    1 cho các biến do người dùng xác định, quy trình được lưu trữ hoặc tham số chức năng hoặc các biến cục bộ chương trình được lưu trữ.

Nhiều gán biến

Một câu lệnh

select * from test1;
2 có thể chứa nhiều bài tập biến, được phân tách bằng dấu phẩy. Câu lệnh này gán một giá trị cho biến do người dùng xác định và biến hệ thống:

insert into test1 values (1,11), (2,22);
7

Nếu bạn đặt nhiều biến hệ thống trong một câu lệnh, từ khóa

id | val
-: | --:
 1 |  11
 2 |  22
4 hoặc
id | val
-: | --:
 1 |  11
 2 |  22
6 gần đây nhất trong câu lệnh được sử dụng cho các bài tập sau không có từ khóa được chỉ định.

Ví dụ về bài tập đa biến:

insert into test1 values (1,11), (2,22);
8

Bộ điều chỉnh

id | val
-: | --:
 1 |  11
 2 |  22
5,
id | val
-: | --:
 1 |  11
 2 |  22
8 và
create table test2 (id int, val int);
0 chỉ áp dụng cho biến hệ thống ngay sau đó, không phải bất kỳ biến hệ thống còn lại nào. Câu lệnh này đặt giá trị toàn cầu
insert into test2 values (1,111);
7 thành 50000 và giá trị phiên thành 1000000:

insert into test1 values (1,11), (2,22);
9

Tài liệu tham khảo biến hệ thống trong các biểu thức

Để chỉ giá trị của một biến hệ thống trong các biểu thức, hãy sử dụng một trong các bộ biến đổi ____ 50. Ví dụ: bạn có thể truy xuất các giá trị biến hệ thống trong câu lệnh

insert into test2 values (1,111);
9 như thế này:

select * from test1;
0

Ghi chú

Một tham chiếu đến một biến hệ thống trong một biểu thức là

select * from test1;
0 (với
create table test2 (id int, val int);
0 thay vì
id | val
-: | --:
 1 |  11
 2 |  22
5 hoặc
id | val
-: | --:
 1 |  11
 2 |  22
8) trả về giá trị phiên nếu nó tồn tại và giá trị toàn cầu khác. Điều này khác với
select * from test1;
4 =
select * from test1;
8, luôn luôn đề cập đến giá trị phiên.

Làm thế nào để bạn gán một giá trị cho một biến trong kích hoạt SQL?

Vậy làm cách nào để gán giá trị cho biến được khai báo chính?Chỉ cần chọn customerID vào customerID từ người bán trong đó id = new.resellerid giới hạn 1.Nhưng sau khi Trigger kết thúc biến này sẽ bị phá hủy và giá trị của nó sẽ bị mất.SELECT CustomerID INTO CustomerId FROM Seller WHERE Id = NEW. ResellerID LIMIT 1 . But after trigger finished this variable will be destroyed, and its value will be lost.

Làm thế nào để bạn gán một giá trị cho một biến trong MySQL?

Các biến được viết là "@var_name" trong đó "var_name" có thể được thay thế bằng bất kỳ ký tự chữ và số nào hoặc các ký hiệu "-", "_" và "$".Chúng có thể được gán bằng các ký tự "=" hoặc ": =".Giá trị có thể là bất kỳ kiểu dữ liệu nào được hỗ trợ bởi cơ sở dữ liệu MySQL.using the "=" or ":=" characters. The value can be any datatype supported by the MySQL database.

Làm thế nào để bạn khai báo một biến trong Trigger?

Tạo Trình kích hoạt Update_estimate_from_line_items Sau khi cập nhật trên estimate_line_items cho mỗi hàng bắt đầu - khai báo biến khai báo vPrev_amnt int;Khai báo vnew_amnt int;Tuyên bố ndiff int;Đặt vprev_amnt = old.price * old.quantity;Đặt vnew_amnt = new.price * mới.DECLARE vPrev_amnt INT; DECLARE vNew_amnt INT; DECLARE nDiff INT; SET vPrev_amnt = OLD. price * OLD. quantity; SET vNew_amnt = NEW. price * NEW.

Chúng ta có thể vượt qua một giá trị trong kích hoạt không?

1 câu trả lời.Không. Bạn không thể vượt qua trình kích hoạt tham số.No. YOu can not pass a parameterto trigger.