top
Loading...
9.4.系統變量
9.4. 系統變量
9.4.1. 結構式系統變量

MySQL可以訪問許多系統和連接變量。當服務器運行時許多變量可以動態更改。這樣通常允許你修改服務器操作而不需要停止并重啟服務器。

mysqld服務器維護兩種變量。全局變量影響服務器整體操作。會話變量影響具體客戶端連接的操作。

當服務器啟動時,它將所有全局變量初始化為默認值。這些默認值可以在選項文件中或在命令行中指定的選項進行更改。服務器啟動后,通過連接服務器并執行SET GLOBAL var_name語句,可以動態更改這些全局變量。要想更改全局變量,必須具有SUPER權限。

服務器還為每個連接的客戶端維護一系列會話變量。在連接時使用相應全局變量的當前值對客戶端的會話變量進行初始化。對于動態會話變量,客戶端可以通過SET SESSION var_name語句更改它們。設置會話變量不需要特殊權限,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量。

對于全局變量的更改可以被訪問該全局變量的任何客戶端看見。然而,它只影響更改后連接的客戶的從該全局變量初始化的相應會話變量。不影響目前已經連接的客戶端的會話變量(即使客戶端執行SET GLOBAL語句也不影響)

可以使用幾種語法形式來設置或檢索全局或會話變量。下面的例子使用了sort_buffer_sizeas作為示例變量名。

要想設置一個GLOBAL變量的值,使用下面的語法:

mysql> SET GLOBAL sort_buffer_size=value;
mysql> SET @@global.sort_buffer_size=value;

要想設置一個SESSION變量的值,使用下面的語法:

mysql> SET SESSION sort_buffer_size=value;
mysql> SET @@session.sort_buffer_size=value;
mysql> SET sort_buffer_size=value;

LOCALSESSION的同義詞。

如果設置變量時不指定GLOBALSESSION或者LOCAL,默認使用SESSION。參見13.5.3節,“SET語法”。

要想檢索一個GLOBAL變量的值,使用下面的語法:

mysql> SELECT @@global.sort_buffer_size;
mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';

要想檢索一個SESSION變量的值,使用下面的語法:

mysql> SELECT @@sort_buffer_size;
mysql> SELECT @@session.sort_buffer_size;
mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';

這里,LOCAL也是SESSION的同義詞。

當你用SELECT @@var_name搜索一個變量時(也就是說,不指定global.session.或者local.)MySQL返回SESSION值(如果存在),否則返回GLOBAL值。

對于SHOW VARIABLES,如果不指定GLOBALSESSION或者LOCALMySQL返回SESSION值。

當設置GLOBAL變量需要GLOBAL關鍵字但檢索時不需要它們的原因是防止將來出現問題。如果我們移除一個與某個GLOBAL變量具有相同名字的SESSION變量,具有SUPER權限的客戶可能會意外地更改GLOBAL變量而不是它自己的連接的SESSION變量。如果我們添加一個與某個GLOBAL變量具有相同名字的SESSION變量,想更改GLOBAL變量的客戶可能會發現只有自己的SESSION變量被更改了。

關于系統啟動選項和系統變量的詳細信息參見5.3.1節,“mysqld命令行選項”和5.3.3節,“服務器系統變量”。在5.3.3.1節,“動態系統變量”中列出了可以在運行時設置的變量。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/language-structure.html
北斗有巢氏 有巢氏北斗