在服務器啓動時,會將每一個全局變量初始化爲其默認值(能夠經過命令行或選項文件中指定的選項更改這些默認值)。而後服務器還爲每一個鏈接的客戶端維護一組會話變量,客戶端的會話變量在鏈接時使用相應全局變量的當前值初始化。服務器
舉一個例子,在服務器啓動時會初始化一個名爲default_storage_engine,做用範圍爲GLOBAL的系統變量。以後每當有一個客戶端鏈接到該服務器時,服務器都會單獨爲該客戶端分配一個名爲default_storage_engine,做用範圍爲SESSION的系統變量,該做用範圍爲SESSION的系統變量值按照當前做用範圍爲GLOBAL的同名系統變量值進行初始化。命令行
很顯然,經過啓動選項設置的系統變量的做用範圍都是GLOBAL的,也就是對全部客戶端都有效的,由於在系統啓動的時候尚未客戶端程序鏈接進來呢。瞭解了系統變量的GLOBAL和SESSION做用範圍以後,咱們再看一下在服務器程序運行期間經過客戶端程序設置系統變量的語法:code
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做用範圍的系統變量。
固然咱們也能夠在查看系統變量的語句上加上要查看哪一個做用範圍的系統變量,就像這樣:co
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];