全域變數和區域變數
在服務器啟動時,會將每個全域變數初始化為其默認值(可以通過命令列或選項檔案中指定的選項更改這些默認值),然后服務器還為每個連接的客戶端維護一組會話變數,客戶端的會話變數在連接時使用相應全域變數的當前值初始化,
舉一個例子,在服務器啟動時會初始化一個名為default_storage_engine,作用范圍為GLOBAL的系統變數,之后每當有一個客戶端連接到該服務器時,服務器都會單獨為該客戶端分配一個名為default_storage_engine,作用范圍為SESSION的系統變數,該作用范圍為SESSION的系統變數值按照當前作用范圍為GLOBAL的同名系統變數值進行初始化,
很顯然,通過啟動選項設定的系統變數的作用范圍都是GLOBAL的,也就是對所有客戶端都有效的,因為在系統啟動的時候還沒有客戶端程式連接進來呢,了解了系統變數的GLOBAL和SESSION作用范圍之后,我們再看一下在服務器程式運行期間通過客戶端程式設定系統變數的語法:
SET [GLOBAL|SESSION] 系統變數名 = 值;
或者寫成這樣也行:
SET [@@(GLOBAL|SESSION).]var_name = XXX;
比如我們想在服務器運行程序中把作用范圍為GLOBAL的系統變數default_storage_engine的值修改為MyISAM,也就是想讓之后新連接到服務器的客戶端都用MyISAM作為默認的存盤引擎,那我們可以選擇下邊兩條陳述句中的任意一條來進行設定:
陳述句一:SET GLOBAL default_storage_engine = MyISAM;
陳述句二:SET @@GLOBAL.default_storage_engine = MyISAM;
如果只想對本客戶端生效,也可以選擇下邊三條陳述句中的任意一條來進行設定:
陳述句一:SET SESSION default_storage_engine = MyISAM;
陳述句二:SET @@SESSION.default_storage_engine = MyISAM;
陳述句三:SET default_storage_engine = MyISAM;
從上邊的陳述句三也可以看出,如果在設定系統變數的陳述句中省略了作用范圍,默認的作用范圍就是SESSION,也就是說SET 系統變數名 = 值和SET SESSION 系統變數名 = 值是等價的,
查看不同作用范圍的系統變數
既然系統變數有作用范圍之分,那我們的SHOW VARIABLES陳述句查看的是什么作用范圍的系統變數呢?
答:默認查看的是SESSION作用范圍的系統變數,
當然我們也可以在查看系統變數的陳述句上加上要查看哪個作用范圍的系統變數,就像這樣:
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/111001.html
標籤:MySQL
上一篇:Mysql優化一
下一篇:通過SSH通道來訪問MySQL
