MYSQL的全局變量和會話變量


系統變量又分為全局變量與會話變量。全局變量在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處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM