通常認為,MySQL中的變量可分為:
- 局部變量
- 用戶變量
- 會話變量
- 全局變量
下面將逐一對其進行介紹。
1、局部變量
局部變量只在當前BEGIN……END代碼塊中有效,其作用域僅限于該語句塊,在該語句塊執(zhí)行完畢后,局部變量就消失了。
DECLARE語句專門用于定義局部變量,可以使用DEFAULT語句來指明默認值。
定義局部變量的語法結(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)。也就是說,一個客戶端定義的變量不能被其它客戶端看到或使用。當客戶端退出時,該客戶端連接的所有變量將失效。
用戶變量不需要事前聲明,可以直接使用,用戶變量以@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)和連接變量。當服務(wù)器運行時許多變量允許動態(tài)更改。這樣就可以修改服務(wù)器操作而不需要停止并重啟服務(wù)器。
mysqld服務(wù)器維護兩種變量:會話變量影響具體客戶端連接的操作;全局變量影響服務(wù)器整體操作。
4、會話變量
服務(wù)器為每個連接的客戶端維護一系列會話變量。會話變量在每次建立一個新的連接時,MySQL會將當前所有的全局變量復(fù)制一份做為會話變量,也就是說,如果在建立會話以后,沒有人為更改過會話變量與全局變量的值,那這兩份變量的值應(yīng)該都是一一對應(yīng),完全一致的。設(shè)置會話變量不需要特殊權(quán)限,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量。會話變量的作用域與用戶變量一樣,僅限于當前連接。當前連接斷開后,其設(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、全局變量
當服務(wù)器啟動時,會將所有全局變量初始化為默認值。這些默認值可以在選項文件中或在命令行中指定的選項進行更改,要想更改全局變量,必須具有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)變量值的時候,只要沒有指定到底是全局變量還是會話變量。都當做會話變量來處理。
注意:
- 賦值變量時不指定關(guān)鍵字GLOBAL、SESSION或LOCAL,則默認使用SESSION關(guān)鍵字;
- 當使用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)載,歡迎擴散,但轉(zhuǎn)載時請標明作者以及原文出處,謝謝合作! ↓↓↓