本文對MySQL中局部變量、用戶變量、系統變量的理解進行總結。
一、局部變量
局部變量由DECLARE語句聲明:
DECLARE var_name[,...] type [DEFAULT value]
默認值由DEFAULT子句來聲明,默認值也可以是一個表達式。
局部變量的作用范圍僅限在它被聲明的BEGIN...END塊內,當語句執行完畢,局部變量就消失了。
二、用戶變量
可以先在用戶變量中保存值然后在以后引用它;這樣可以將值從一個語句傳遞到另一個語句。用戶變量與連接有關。也就是說,一個客戶端定義的變量不能被其它客戶端看到或使用。當客戶端退出時,該客戶端連接的所有變量將自動釋放。用戶變量名對大小寫不敏感!
對用戶變量的定義有兩種方式:
第一種是執行SET語句
SET @var_name = expr [, @var_name = expr] ...
對於SET,可以使用=或:=作為分配符。分配給每個變量的expr可以為整數、實數、字符串或者NULL值。
第二種是使用SELECT語句
使用SELECT定義用戶變量只能使用:=作為分配符(因為在非SET語句中 = 被視為一個‘比較操作符’)
mysql> SET @t1=0, @t2=0, @t3=0;
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 |
+----------------------+------+------+------+
| 5 | 5 | 1 | 4 |
+----------------------+------+------+------+
三、系統變量
MySQL服務器維護兩種變量:全局變量影響服務器整體操作;會話變量影響具體客戶端連接的操作。
1、全局變量
當服務器啟動時,它將所有全局變量初始化為默認值。這些默認值可以在配置文件(my.ini)中或在命令行中指定的選項進行更改。服務器啟動后,通過連接服務器並執行SET GLOBAL var_name語句,可以動態更改這些全局變量。要想更改全局變量,必須具有SUPER權限。
要想設置一個GLOBAL變量的值,使用下面的語法:
mysql> SET GLOBAL sort_buffer_size=value;
mysql> SET @@global.sort_buffer_size=value;
要想查看一個GLOBAL變量的值,使用下面的語法:
mysql> SELECT @@global.sort_buffer_size;
mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';
2、會話變量
服務器還為每個連接的客戶端維護一系列會話變量。在連接時使用相應全局變量的當前值對客戶端的會話變量進行初始化。對於動態會話變量,客戶端可以通過SET SESSION var_name語句更改它們。設置會話變量不需要特殊權限,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量。當前連接斷開后,其設置的所有會話變量均
會自動釋放
要想設置一個SESSION變量的值,使用下面的語法:
mysql> SET SESSION sort_buffer_size=value;
mysql> SET @@session.sort_buffer_size=value;
mysql> SET sort_buffer_size=value;
要想查看一個SESSION變量的值,使用下面的語法:
mysql> SELECT @@sort_buffer_size;
mysql> SELECT @@session.sort_buffer_size;
mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';
注意:
對於全局變量的更改可以被訪問該全局變量的任何客戶端看見。然而,它只影響更改后連接的客戶的從該全局變量初始化的相應會話變量。不影響目前已經連接的客戶端的會話變量(即使客戶端執行SET GLOBAL語句也不影響)。
當你用SELECT @@var_name搜索一個變量時(也就是說,不指定global.、session.),MySQL返回SESSION值(如果存在),否則返回GLOBAL值。
對於SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。
通用的賦值方式:
SELECT...INTO語句
SELECT col_name[,...] INTO var_name[,...] table_expr
這個SELECT語法把選定的列直接存儲到變量
四、用戶變量與會話變量的區別:
用戶變量是用戶定義的變量,是MySQL服務器定義和維護的變量,所以用戶變量和會話變量之間的區別在於,是誰在維護這些變量。用戶變量和系統會話變量在當前客戶端退出后都會自動釋放。而系統會話變量的不通之處在於,在客戶端建立連接時會創建一系列會話變量,並以全局變量的當前值初始化會話變量(會話變量相當於系統全局變量的副本),對系統會話變量的操作修改僅對當前客戶端產生影響,並不會修改系統全局變量。自定義的會話變量的特性與用戶變量就沒有什么區別了。
(個人參考MySQL文檔的理解和總結,若有問題請指正,謝謝)
相關資源:mysql存儲過程中變量的定義與賦值操作_mysql存儲過程設置變量...
屁乎小銘
關注
1
0
1
————————————————
版權聲明:本文為CSDN博主「屁乎小銘」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42641385/article/details/113168108