mysql中的system variables的作用域有兩種:global與session。
set system variables的操作比較簡單:
SET GLOBAL sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
show system variables 與set操作類似,也分為global與session,不多舉例。
Global與Session看起來是二種作用域,但是從system variables是否支持global與session的角度來講, 又可以分為三種情況:
1) 只支持global。
2) 同時支持global與session。
3) 只支持session。
最容易使人困惑的就是第二種情況了,經常可以遇到以下的情況:
SET GLOBAL xxxx=1;
然後
SHOW VARIABLES LIKE 'xxxx';
會發現xxxx的值沒有發生變化....
因為不指定global或者session的時候,session為默認值。
還有這種情況,更是危險:
SET GLOBAL xxxx=1;
在當前mysql shell或者其它已經打開的mysql shell中執行一些SQL語句發現貌似xxxx沒有生效。。。
在session創建的時候,會把各個variables的值從global復制到當前session,一旦session創建成功,set global就再也無法影響到它了。
所以, set和show的時候,一定要明確指定global或session,一定要用show復查一下,一定要慎重。
當然,我說了也是白說,等哪天你踩到了這個坑,就會深有感觸了。