MySQL SET GLOBAL biến không hoạt động

Bạn đang xem tài liệu về phiên bản cũ hơn của cơ sở dữ liệu TiDB (TiDB v4. 0). Bạn nên sử dụng phiên bản LTS mới nhất của cơ sở dữ liệu TiDB

Câu lệnh SET [GLOBAL|SESSION] sửa đổi một trong các biến tích hợp sẵn của TiDB, thuộc phạm vi SESSION hoặc GLOBAL

Tương tự như MySQL, các thay đổi đối với biến GLOBAL không áp dụng cho kết nối hiện có hoặc kết nối cục bộ. Chỉ các phiên mới phản ánh các thay đổi đối với giá trị

Tóm tắt

ĐặtStmt

MySQL SET GLOBAL biến không hoạt động

Chuyển nhượng biến

MySQL SET GLOBAL biến không hoạt động

ví dụ

Nhận giá trị của sql_mode

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW SESSION VARIABLES LIKE 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Cập nhật giá trị của sql_mode trên toàn cầu. Nếu bạn kiểm tra giá trị của SQL_mode sau khi cập nhật, bạn có thể thấy rằng giá trị của cấp độ SESSION chưa được cập nhật

Định nghĩa của wait_timeout. Số giây máy chủ đợi hoạt động trên một kết nối không tương tác trước khi đóng nó. Khi khởi động luồng, giá trị wait_timeout của phiên được khởi tạo từ giá trị wait_timeout toàn cầu hoặc từ giá trị Interactive_timeout toàn cầu

Đây là bài kiểm tra

Truy vấn mà không thay đổi bất kỳ tham số nào, tất cả các giá trị được đặt thành 8 giờ theo mặc định

SELECT @@global.wait_timeout , @@session.wait_timeout , @@global.interactive_timeout , @@session.interactive_timeout;
+-----------------------+------------------------+------------------------------+-------------------------------+
| @@global.wait_timeout | @@session.wait_timeout | @@global.interactive_timeout | @@session.interactive_timeout |
+-----------------------+------------------------+------------------------------+-------------------------------+
|                 28800 |                  28800 |                        28800 |                         28800 |
+-----------------------+------------------------+------------------------------+-------------------------------+
1 row in set (0.00 sec)

Thay đổi tham số ở cấp phiên

SET wait_timeout = 10 , interactive_timeout = 10;
Query OK, 0 rows affected (0.00 sec)

Kết quả, tất cả đều tốt như mong đợi, cài đặt chung vẫn giữ nguyên và cài đặt phiên được thay đổi

SELECT @@global.wait_timeout , @@session.wait_timeout , @@global.interactive_timeout , @@session.interactive_timeout;
+-----------------------+------------------------+------------------------------+-------------------------------+
| @@global.wait_timeout | @@session.wait_timeout | @@global.interactive_timeout | @@session.interactive_timeout |
+-----------------------+------------------------+------------------------------+-------------------------------+
|                 28800 |                     10 |                        28800 |                            10 |
+-----------------------+------------------------+------------------------------+-------------------------------+
1 row in set (0.00 sec)

Thay đổi tham số ở cấp độ toàn cầu

SET GLOBAL wait_timeout = 10 ;
Query OK, 0 rows affected (0.00 sec)

SET GLOBAL interactive_timeout = 10;
Query OK, 0 rows affected (0.00 sec)

Kết quả , tất cả có vẻ tốt như mong đợi

SELECT @@global.wait_timeout , @@session.wait_timeout , @@global.interactive_timeout , @@session.interactive_timeout;
+-----------------------+------------------------+------------------------------+-------------------------------+
| @@global.wait_timeout | @@session.wait_timeout | @@global.interactive_timeout | @@session.interactive_timeout |
+-----------------------+------------------------+------------------------------+-------------------------------+
|                    10 |                     10 |                           10 |                            10 |
+-----------------------+------------------------+------------------------------+-------------------------------+
1 row in set (0.00 sec)

Ngắt kết nối chuỗi MySQL và kết nối lại, và tất cả sẽ hoạt động tốt trở lại

SELECT @@global.wait_timeout , @@session.wait_timeout , @@global.interactive_timeout , @@session.interactive_timeout;
+-----------------------+------------------------+------------------------------+-------------------------------+
| @@global.wait_timeout | @@session.wait_timeout | @@global.interactive_timeout | @@session.interactive_timeout |
+-----------------------+------------------------+------------------------------+-------------------------------+
|                    10 |                     10 |                           10 |                            10 |
+-----------------------+------------------------+------------------------------+-------------------------------+
1 row in set (0.00 sec)

Làm cách nào để đặt giá trị biến toàn cầu trong MySQL?

Để gán giá trị cho biến hệ thống toàn cầu, đặt trước tên biến bằng từ khóa GLOBAL hoặc @@GLOBAL. vòng loại . THIẾT LẬP TOÀN CẦU max_connections = 1000; .

Tại sao các biến toàn cầu không được sử dụng?

Các biến toàn cục có thể được thay đổi bởi bất kỳ phần nào của mã, gây khó khăn cho việc ghi nhớ hoặc suy luận về mọi cách sử dụng có thể . Một biến toàn cầu có thể không có quyền kiểm soát truy cập. Nó không thể bị giới hạn trong một số phần của chương trình. Việc sử dụng các biến toàn cục gây ra sự ghép mã rất chặt chẽ.

làm gì. = nghĩa là gì trong MySQL?

Mô tả. . = Gán giá trị . = Gán một giá trị (như một phần của câu lệnh SET hoặc như một phần của mệnh đề SET trong câu lệnh CẬP NHẬT)

Tôi có thể sử dụng cái gì thay vì biến toàn cục?

Phương pháp tiếp cận Hàm hoàn chỉnh . Thay vì sử dụng các biến toàn cục để chia sẻ dữ liệu giữa một hàm và người gọi nó, chúng ta có thể viết các hàm để chúng nhận tất cả thông tin cần thiết ở đầu vào và trả về tất cả kết quả của chúng cho người gọi. Bằng cách đó, chúng tôi cung cấp tất cả các yếu tố đầu vào mà chức năng cần để chạy.