通常認(rèn)為,MySQL中的變量可分為:
- 局部變量
- 用戶變量
- 會話變量
- 全局變量
下面將逐一對其進(jìn)行介紹。
1葫隙、局部變量
局部變量只在當(dāng)前BEGIN……END代碼塊中有效狂巢,其作用域僅限于該語句塊,在該語句塊執(zhí)行完畢后牙躺,局部變量就消失了愁憔。
DECLARE語句專門用于定義局部變量,可以使用DEFAULT語句來指明默認(rèn)值孽拷。
定義局部變量的語法結(jié)構(gòu):
DECLARE var_name [,……] type [DEFAULT value];
使用SET語句賦值局部變量:
set var_name = value;
使用SELECT語句賦值局部變量:
SELECT col_name[,...] INTO var_name [FROM tbl_name] [WHERE……];
創(chuàng)建存儲過程p1用來演示局部變量的相關(guān)操作:

其中變量c就是由DECLARE語句定義的局部變量吨掌,調(diào)用后結(jié)果如下:

SELECT語句賦值在(九)MySQL存儲過程中的第5部分演示過,這里就此省略脓恕。
2膜宋、用戶變量
用戶變量的作用域比局部變量要廣,用戶變量與連接有關(guān)进肯。也就是說激蹲,一個客戶端定義的變量不能被其它客戶端看到或使用。當(dāng)客戶端退出時江掩,該客戶端連接的所有變量將失效学辱。
用戶變量不需要事前聲明,可以直接使用环形,用戶變量以@var_name的形式命名變量策泣,變量名必須以@開頭。
使用SET語句賦值局部變量:
SET @var_name = value;
或
SET @var_name := value;
使用SELECT語句賦值局部變量:
SELECT @var_name := value;
關(guān)于“=”與“:=”的區(qū)別:
對于SET語句而言抬吟,兩種方式都可以使用萨咕;
對于SELECT語句而言,只能使用“:=”火本,因為在SELECT語句中危队,“=”被看作是比較操作符。
創(chuàng)建存儲過程p2用來演示用戶變量的相關(guān)操作:

其中變量@sum和@prod就是使用SELECT語句賦值的用戶變量钙畔,調(diào)用后結(jié)果如下:

剩余的變量@var1和@var2則是使用SET語句賦值的用戶變量茫陆,查詢后結(jié)果如下:

3、系統(tǒng)變量
MySQL可以訪問許多系統(tǒng)和連接變量擎析。當(dāng)服務(wù)器運行時許多變量允許動態(tài)更改簿盅。這樣就可以修改服務(wù)器操作而不需要停止并重啟服務(wù)器。
mysqld服務(wù)器維護(hù)兩種變量:會話變量影響具體客戶端連接的操作;全局變量影響服務(wù)器整體操作桨醋。
4棚瘟、會話變量
服務(wù)器為每個連接的客戶端維護(hù)一系列會話變量。會話變量在每次建立一個新的連接時喜最,MySQL會將當(dāng)前所有的全局變量復(fù)制一份做為會話變量偎蘸,也就是說,如果在建立會話以后返顺,沒有人為更改過會話變量與全局變量的值禀苦,那這兩份變量的值應(yīng)該都是一一對應(yīng),完全一致的遂鹊。設(shè)置會話變量不需要特殊權(quán)限振乏,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量秉扑。會話變量的作用域與用戶變量一樣慧邮,僅限于當(dāng)前連接。當(dāng)前連接斷開后舟陆,其設(shè)置的所有會話變量均失效误澳。
賦值會話變量的方式:
SET SESSION var_name = value;
SET @@SESSION.var_name = value;
SET var_name = value;
查詢會話變量的方式:
SELECT @@var_name;
SELECT @@SESSION.var_name;
SHOW SESSION VARIABLES [LIKE '%var%'];
注意:
凡是上面提到的“SESSION”關(guān)鍵字,都可以用“LOCAL”關(guān)鍵字來代替秦躯,例如:
SELECT @@LOCAL.var_name;
查詢“sort_buffer_size”來演示會話變量的相關(guān)操作:

5忆谓、全局變量
當(dāng)服務(wù)器啟動時,會將所有全局變量初始化為默認(rèn)值踱承。這些默認(rèn)值可以在選項文件中或在命令行中指定的選項進(jìn)行更改倡缠,要想更改全局變量,必須具有SUPER權(quán)限茎活。全局變量作用于SERVER的整個生命周期昙沦,但是不能跨重啟,即重啟后所有設(shè)置的全局變量均失效载荔。要想讓全局變量重啟后繼續(xù)生效盾饮,需要更改相應(yīng)的配置文件。
賦值全局變量的方式:
SET GLOBAL var_name = value;
SET @@GLOBAL.var_name = value;
查詢?nèi)肿兞康姆绞剑?/strong>
SELECT @@GLOBAL.var_name;
SHOW GLOBAL VARIABLES [LIKE '%var%'];
查詢“sort_buffer_size”來演示全局變量的相關(guān)操作:

無論是在設(shè)置系統(tǒng)變量還是查詢系統(tǒng)變量值的時候懒熙,只要沒有指定到底是全局變量還是會話變量丘损。都當(dāng)做會話變量來處理。
注意:
- 賦值變量時不指定關(guān)鍵字GLOBAL工扎、SESSION或LOCAL号俐,則默認(rèn)使用SESSION關(guān)鍵字;
- 當(dāng)使用SELECT @@var_name檢索變量時(即不指定關(guān)鍵字GLOBAL定庵、SESSION或LOCAL),MySQL返回SESSION值(如果存在),否則返回GLOBAL值蔬浙;
- 對于SHOW VARIABLES猪落,如果不指定關(guān)鍵字GLOBAL、SESSION或LOCAL畴博,MySQL返回SESSION值笨忌。
6、MySQL中的變量SQL語句匯總:
局部變量
定義局部變量:
DECLARE var_name [,……] type [DEFAULT value];
使用SET語句賦值局部變量:
set var_name = value;
使用SELECT語句賦值局部變量:
SELECT col_name[,...] INTO var_name [FROM tbl_name] [WHERE……];用戶變量
使用SET語句賦值局部變量:
SET @var_name = value;
或
SET @var_name := value;
使用SELECT語句賦值局部變量:
SELECT @var_name := value;會話變量
賦值會話變量的方式:
SET SESSION var_name = value;
SET @@SESSION.var_name = value;
SET var_name = value;
查詢會話變量的方式:
SELECT @@var_name;
SELECT @@SESSION.var_name;
SHOW SESSION VARIABLES [LIKE '%var%'];
注意:
凡是上面提到的“SESSION”關(guān)鍵字俱病,都可以用“LOCAL”關(guān)鍵字來代替官疲,例如:
SELECT @@LOCAL.var_name;全局變量
賦值全局變量的方式:
SET GLOBAL var_name = value;
SET @@GLOBAL.var_name = value;
查詢?nèi)肿兞康姆绞剑?br> SELECT @@GLOBAL.var_name;
SHOW GLOBAL VARIABLES [LIKE '%var%'];
版權(quán)聲明:歡迎轉(zhuǎn)載,歡迎擴(kuò)散亮隙,但轉(zhuǎn)載時請標(biāo)明作者以及原文出處途凫,謝謝合作! ↓↓↓