系統變量又分為全局變量與會話變量。全局變量在MYSQL啟動的時候由服務器自動將它們初始化為默認值,這些默認值可以通過更改my.ini這個文件來更改。
會話變量在每次建立一個新的連接的時候,由MYSQL來初始化。MYSQL會將當前所有全局變量的值復制一份。來做為會話變量。
(也就是說,如果在建立會話以后,沒有手動更改過會話變量與全局變量的值,那所有這些變量的值都是一樣的。)
全局變量與會話變量的區別就在於,對全局變量的修改會影響到整個服務器,但是對會話變量的修改,只會影響到當前的會話(也就是當前的數據庫連接)。
我們可以利用下列語句將所有的會話變量輸出:(可以簡寫為show variables,沒有指定是輸出全局變量還是會話變量的話,默認就輸出會話變量。)
show session variables;
如果想輸出所有全局變量:
show global variables;
有些系統變量的值是可以利用語句來動態進行更改的,但是有些系統變量的值卻是只讀的,對於那些可以更改的系統變量,我們可以利用set語句進行更改。
如果想要更改會話變量的值,利用語句:
set session varname = value;
或者set @@session.varname = value;
比如:
mysql> set session sort_buffer_size = 40000; Query OK, 0 rows affected(0.00 sec)
如果想要更改全局變量的值,將session改成global:
set global sort_buffer_size = 40000; set @@global.sort_buffer_size = 40000;
不過要想更改全局變量的值,需要擁有SUPER權限 。
(
注意,ROOT只是一個內置的賬號,而不是一種權限 ,
這個賬號擁有了MYSQL數據庫里的所有權限。任何賬號只要它擁有了名為SUPER的這個權限,
就可以更改全局變量的值,正如任何用戶只要擁有FILE權限就可以調用load_file或者
into outfile ,into dumpfile,load data infile一樣。
)
利用select語句我們可以查詢單個會話變量或者全局變量的值:
select @@session.sort_buffer_size select @@global.sort_buffer_size select @@global.tmpdir
凡是上面提到的session,都可以用local這個關鍵字來代替。比如:
select @@local.sort_buffer_size
local 是 session的近義詞。
無論是在設置系統變量還是查詢系統變量值的時候,只要沒有指定到底是全局變量還是會話變量。
都當做會話變量來處理。
比如:
set @@sort_buffer_size = 50000; select @@sort_buffer_size;
上面都沒有指定是GLOBAL還是SESSION,所以全部當做SESSION處理。