13.7.4.1 & nbsp; Đặt cú pháp để gán biến
SET variable = expr [, variable = expr] ...
variable: {
user_var_name
| param_name
| local_var_name
| {GLOBAL | @@GLOBAL.} system_var_name
| [SESSION | @@SESSION. | @@] system_var_name
}
SET @var_name = expr;
5 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
SET @var_name = expr;
5 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
SET @var_name = expr;
5 để cài đặt các biến. Họ sử dụng toán tử gán SET @var_name = expr;
8, nhưng toán tử gán SET @var_name = expr;
9 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
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ỗiNhiều gán biến
SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
Tài liệu tham khảo biến hệ thống trong các biểu thức
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.
Tham số và phân công biến cục bộPhân công biến hệ thống
CREATE PROCEDURE p[increment INT]
BEGIN
DECLARE counter INT DEFAULT 0;
WHILE counter < 10 DO
-- ... do work ...
SET counter = counter + increment;
END WHILE;
END;
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
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à
SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
0 và được gán giá trị biểu thức như sau:SET @var_name = expr;
Ví dụ:
SET GLOBAL max_connections = 1000; SET @@GLOBAL.max_connections = 1000;
Như đã được chứng minh bởi các câu lệnh đó,
1 có thể từ đơn giản [giá trị theo nghĩa đen] đến phức tạp hơn [giá trị được trả về bởi một truy vấn con vô hướng].SET @name = 43; SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
SET SESSION sql_mode = 'TRADITIONAL'; SET LOCAL sql_mode = 'TRADITIONAL'; SET @@SESSION.sql_mode = 'TRADITIONAL'; SET @@LOCAL.sql_mode = 'TRADITIONAL'; SET @@sql_mode = 'TRADITIONAL'; SET sql_mode = 'TRADITIONAL';
Bảng Lược đồ hiệu suất
2 chứa thông tin về các biến do người dùng xác định. Xem Phần & NBSP; 25.12.10, Hiệu suất Lược đồ hiệu suất Các bảng biến do người dùng xác định.SET @name = 43; SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
SET @var_name = expr;
5 áp dụng cho các tham số và các biến cục bộ trong bối cảnh của đối tượng được lưu trữ trong đó chúng được xác định. Quy trình sau sử dụng tham số thủ tục SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
4 và biến cục bộ SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
5:SET @@SESSION.max_join_size = DEFAULT;
SET @@SESSION.max_join_size = @@GLOBAL.max_join_size;
Để hiển thị tên và giá trị biến hệ thống:
Sử dụng câu lệnh
6; Xem Phần & NBSP; 13.7.5.39, Câu lệnh Biến hiển thị.CREATE PROCEDURE p[increment INT] BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < 10 DO -- ... do work ... SET counter = counter + increment; END WHILE; END;
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.
Nếu bất kỳ gán biến nào trong câu lệnh
SET @var_name = expr;
5 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 bị thay đổi.
SET @var_name = expr;
5 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 SET @var_name = expr;
5 sử dụng cú pháp từ khóa [ví dụ: SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
7 hoặc SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
9], 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ụ: SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
8 hoặc CREATE PROCEDURE p[increment INT]
BEGIN
DECLARE counter INT DEFAULT 0;
WHILE counter < 10 DO
-- ... do work ...
SET counter = counter + increment;
END WHILE;
END;
1].Sử dụng
5 [bất kỳ biến thể nào] để đặt biến chỉ đọc:SET @var_name = expr;
mysql> SET GLOBAL version = 'abc'; ERROR 1238 [HY000]: Variable 'version' is a read only variable
Sử dụng
7 để đặt một biến chỉ có giá trị phiên:SET @name = 43; SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
mysql> SET GLOBAL sql_log_bin = ON; ERROR 1231 [42000]: Variable 'sql_log_bin' can't be set to the value of 'ON'
Sử dụng
9 để đặt một biến chỉ có giá trị toàn cầu:SET @name = 43; SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
mysql> SET SESSION max_connections = 1000; ERROR 1229 [HY000]: Variable 'max_connections' is a GLOBAL variable and should be set with SET GLOBAL
Thiếu sót của
7 để đặt một biến chỉ có giá trị toàn cầu:SET @name = 43; SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
0SET @var_name = expr;
Bộ điều chỉnh
8,SET @name = 43; SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
1 vàCREATE PROCEDURE p[increment INT] BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < 10 DO -- ... do work ... SET counter = counter + increment; END WHILE; END;
3 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ữ.CREATE PROCEDURE p[increment INT] BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < 10 DO -- ... do work ... SET counter = counter + increment; END WHILE; END;
Không phải tất cả các biến hệ thống có thể được đặt thành
4. Trong những trường hợp như vậy, việc gánCREATE PROCEDURE p[increment INT] BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < 10 DO -- ... do work ... SET counter = counter + increment; END WHILE; END;
4 dẫn đến một lỗi.CREATE PROCEDURE p[increment INT] BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < 10 DO -- ... do work ... SET counter = counter + increment; END WHILE; END;
Một lỗi xảy ra đối với các nỗ lực gán
4 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ữ.CREATE PROCEDURE p[increment INT] BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < 10 DO -- ... do work ... SET counter = counter + increment; END WHILE; END;
Một câu lệnh
SET @var_name = expr;
5 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:SET @var_name = expr;
1Nếu bạn đặt nhiều biến hệ thống trong một câu lệnh, từ khóa
SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
7 hoặc SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
9 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:
SET @var_name = expr;
2Bộ điều chỉnh
SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
8, CREATE PROCEDURE p[increment INT]
BEGIN
DECLARE counter INT DEFAULT 0;
WHILE counter < 10 DO
-- ... do work ...
SET counter = counter + increment;
END WHILE;
END;
1 và CREATE PROCEDURE p[increment INT]
BEGIN
DECLARE counter INT DEFAULT 0;
WHILE counter < 10 DO
-- ... do work ...
SET counter = counter + increment;
END WHILE;
END;
3 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 SET @@SESSION.max_join_size = DEFAULT;
SET @@SESSION.max_join_size = @@GLOBAL.max_join_size;
0 thành 50000 và giá trị phiên thành 1000000:SET @var_name = expr;
3Tà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 ____ 33. Ví dụ: bạn có thể truy xuất các giá trị biến hệ thống trong câu lệnh
SET @@SESSION.max_join_size = DEFAULT;
SET @@SESSION.max_join_size = @@GLOBAL.max_join_size;
2 như thế này:SET @var_name = expr;
4Ghi chú
Một tham chiếu đến một biến hệ thống trong một biểu thức là
SET @@SESSION.max_join_size = DEFAULT;
SET @@SESSION.max_join_size = @@GLOBAL.max_join_size;
3 [với CREATE PROCEDURE p[increment INT]
BEGIN
DECLARE counter INT DEFAULT 0;
WHILE counter < 10 DO
-- ... do work ...
SET counter = counter + increment;
END WHILE;
END;
3 thay vì SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
8 hoặc CREATE PROCEDURE p[increment INT]
BEGIN
DECLARE counter INT DEFAULT 0;
WHILE counter < 10 DO
-- ... do work ...
SET counter = counter + increment;
END WHILE;
END;
1] 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 SET @@SESSION.max_join_size = DEFAULT;
SET @@SESSION.max_join_size = @@GLOBAL.max_join_size;
7 = SET @name = 43;
SET @total_tax = [SELECT SUM[tax] FROM taxable_transactions];
1, luôn luôn đề cập đến giá trị phiên.