MySQL系統(tǒng)變量的使用
MySQL中的變量類型很多,下面為您介紹的是MySQL系統(tǒng)變量方面的知識,如果您對MySQL系統(tǒng)變量感興趣的話,不妨一看。
MySQL可以訪問許多系統(tǒng)和連接變量。當(dāng)服務(wù)器運(yùn)行時許多變量可以動態(tài)更改。這樣通常允許你修改服務(wù)器操作而不需要停止并重啟服務(wù)器。
mysqld服務(wù)器維護(hù)兩種MySQL系統(tǒng)變量。全局變量影響服務(wù)器整體操作。會話變量影響具體客戶端連接的操作。
當(dāng)服務(wù)器啟動時,它將所有全局變量初始化為默認(rèn)值。這些默認(rèn)值可以在選項文件中或在命令行中指定的選項進(jìn)行更改。服務(wù)器啟動后,通過連接服務(wù)器并執(zhí)行SET GLOBAL var_name語句,可以動態(tài)更改這些全局變量。要想更改全局變量,必須具有SUPER權(quán)限。
服務(wù)器還為每個連接的客戶端維護(hù)一系列會話變量。在連接時使用相應(yīng)全局變量的當(dāng)前值對客戶端的會話變量進(jìn)行初始化。對于動態(tài)會話變量,客戶端可以通過SET SESSION var_name語句更改它們。設(shè)置會話變量不需要特殊權(quán)限,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量。
對于全局變量的更改可以被訪問該全局變量的任何客戶端看見。然而,它只影響更改后連接的客戶的從該全局變量初始化的相應(yīng)會話變量。不影響目前已經(jīng)連接的客戶端的會話變量(即使客戶端執(zhí)行SET GLOBAL語句也不影響)。
可以使用幾種語法形式來設(shè)置或檢索全局或會話變量。下面的例子使用了sort_buffer_sizeas作為示例變量名。
要想設(shè)置一個GLOBAL變量的值,使用下面的語法:
mysql> SET GLOBAL sort_buffer_size=value;
mysql> SET @@global.sort_buffer_size=value;
要想設(shè)置一個SESSION變量的值,使用下面的語法:
mysql> SET SESSION sort_buffer_size=value;
mysql> SET @@session.sort_buffer_size=value;
mysql> SET sort_buffer_size=value;
LOCAL是SESSION的同義詞。
如果設(shè)置變量時不指定GLOBAL、SESSION或者LOCAL,默認(rèn)使用SESSION。
要想檢索一個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的同義詞。
當(dāng)你用SELECT @@var_name搜索一個變量時(也就是說,不指定global.、session.或者local.),MySQL返回SESSION值(如果存在),否則返回GLOBAL值。
對于SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。
當(dāng)設(shè)置GLOBAL變量需要GLOBAL關(guān)鍵字但檢索時不需要它們的原因是防止將來出現(xiàn)問題。如果我們移除一個與某個GLOBAL變量具有相同名字的SESSION變量,具有SUPER權(quán)限的客戶可能會意外地更改GLOBAL變量而不是它自己的連接的SESSION變量。如果我們添加一個與某個GLOBAL變量具有相同名字的SESSION變量,想更改GLOBAL變量的客戶可能會發(fā)現(xiàn)只有自己的SESSION變量被更改了。
【編輯推薦】