Hướng dẫn mysql setting system variables - mysql thiết lập các biến hệ thống

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

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

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 đó,

    SET @name = 43;
    SET @total_tax = (SELECT SUM(tax) FROM taxable_transactions);
    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 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

    SET @name = 43;
    SET @total_tax = (SELECT SUM(tax) FROM taxable_transactions);
    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 @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

    CREATE PROCEDURE p(increment INT)
    BEGIN
      DECLARE counter INT DEFAULT 0;
      WHILE counter < 10 DO
        -- ... do work ...
        SET counter = counter + increment;
      END WHILE;
    END;
    6; 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

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

    SET @var_name = expr;
    5 (bất kỳ biến thể nào) để đặt biến chỉ đọc:

    mysql> SET GLOBAL version = 'abc';
    ERROR 1238 (HY000): Variable 'version' is a read only variable
  • Sử dụng

    SET @name = 43;
    SET @total_tax = (SELECT SUM(tax) FROM taxable_transactions);
    7 để đặt một biến chỉ có giá trị phiên:

    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

    SET @name = 43;
    SET @total_tax = (SELECT SUM(tax) FROM taxable_transactions);
    9 để đặt một biến chỉ có giá trị toàn cầu:

    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

    SET @name = 43;
    SET @total_tax = (SELECT SUM(tax) FROM taxable_transactions);
    7 để đặt một biến chỉ có giá trị toàn cầu:

    SET @var_name = expr;
    0
  • Bộ đ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 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 PROCEDURE p(increment INT)
    BEGIN
      DECLARE counter INT DEFAULT 0;
      WHILE counter < 10 DO
        -- ... do work ...
        SET counter = counter + increment;
      END WHILE;
    END;
    4. Trong những trường hợp như vậy, việc gán
    CREATE 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.

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

    CREATE PROCEDURE p(increment INT)
    BEGIN
      DECLARE counter INT DEFAULT 0;
      WHILE counter < 10 DO
        -- ... do work ...
        SET counter = counter + increment;
      END WHILE;
    END;
    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ữ.

Nhiều gán biến

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;
1

Nế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;
2

Bộ đ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;
3

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 ____ 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;
4

Ghi 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.