系統變量又分爲全局變量與會話變量。mysql
全局變量在MYSQL啓動的時候由服務器自動將它們初始化爲默認值,這些默認值能夠經過更改my.ini這個文件來更改。sql
會話變量在每次創建一個新的鏈接的時候,由MYSQL來初始化。MYSQL會將當前全部全局變量的值複製一份。來作爲會話變量。(也就是說,若是在創建會話之後,沒有手動更改過會話變量與全局變量的值,那全部這些變量的值都是同樣的。)數據庫
全局變量與會話變量的區別就在於,對全局變量的修改會影響到整個服務器,可是對會話變量的修改,只會影響到當前的會話(也就是當前的數據庫鏈接)。服務器
咱們能夠利用session
show session variables;.net
語句將全部的會話變量輸出:(能夠簡寫爲show variables,沒有指定是輸出全局變量仍是會話變量的話,默認就輸出會話變量。)blog
mysql> show global variables;rem
+———————————+—————————————————————-+it
| Variable_name | Value |io
+———————————+—————————————————————-+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| automatic_sp_privileges | ON |
…………………………….省略…………………………
| tmpdir | C:\WINDOWS\TEMP\ |
| transaction_alloc_block_size | 8192 |
| transaction_prealloc_size | 4096 |
| tx_isolation | REPEATABLE-READ |
| updatable_views_with_limit | YES |
| version | 5.0.67-community-nt |
| version_comment | MySQL Community Edition (GPL) |
| version_compile_machine | ia32 |
| version_compile_os | Win32 |
| wait_timeout | 28800 |
+———————————+—————————————————————-+
232 rows in set, 1 warning (0.00 sec)
若是想輸出全部全局變量:
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;