MySQL變量介紹和用法簡介
- 2019 年 10 月 7 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/u014427391/article/details/100889674
本博客介紹一下MySQL中變量的用法和注意細節
文章目錄
一、用戶變量
1.1、用戶變量定義
MySQL官方手冊里是將變量分為系統變量和用戶變量的,用戶變量就是在一個語句里加在用戶自定義的變量,然後這個變量可以賦值給其它變量,或者在另外一個語句里調用等,本博客基於MySQL5.7版本,其它版本的還是具體參考官方手冊
【拓展】: MySQL官方手冊里是將變量分為系統變量和用戶變量的,不過有些地方也將變量按照用法分為:1、臨時變量(@符號的情況,也就是mysql手冊介紹的用戶變量);2、局部變量(declare方式);3、會話變量;4、全局變量(也就是系統變量),其實分類只是為了方便記錄學習,重點是掌握用法原理就可以,因為局部變量和會話變量用的比較少,所以簡單介紹一下 一、declare聲明變量(局部變量) declare聲明變量:declare聲明關鍵字可以用於定義變量,一般用於存儲過程或者自定義函數里 a)、declare聲明變量 用法:聲明一個v1變量,定義為int類型,默認值為0; declare v1 INT default 0; b)、declare變量使用 聲明後變量一般是在存儲過程或者自定義里的,所以是寫在begin和end關鍵字之間的,外面的不能直接定義,然後調用,所以declare也被稱之為局部變量 二、session會話變量 session會話變量用的比較少,不過有個特性是和@臨時變量是一致的,就是關閉會話,或者說關閉數據庫連接的時候,變量是會失效的
1.2、用戶變量用法
a)、設置用戶變量
SET @var_name = expr [, @var_name = expr] ...
其實就是直接用關鍵字set就可以,例子
set @v1 =: 'test';
或者直接省略冒號也是可以的,不過建議還是加上,以免有些情況獲取不到數據
set @v1 ='test';
其實,可以不用set關鍵字
select @v1 := 'test';
查詢時候直接賦值也是可以的,看起來@符合的用法比較靈活,並沒有那麼多約束。所以有些地方是將用這種用法稱之為臨時變量
b)、查詢用戶變量
查詢變量:
select @[變量名];
比如剛才的@v1臨時變量
select @v1;
備註:使用@符號的這種用法,在數據庫連接的時候是有效的,當你關閉數據庫連接的時候,變量值是會被置為Null值的,所以也是這種@符號用法set的變量被稱之為臨時變量的原因
【用法注意事項】:
- 變量名稱 用戶變量名稱不區分大小寫。名稱的最大長度為64個字符,假如超過會報錯:
Error Code: 3061 User variable name ${變量名} is illegal
- 變量分配值 用戶變量分配值:整數,十進制,浮點,二進制或非二進制字符串或NULL值,如果為日期類型是不支持的
- 分配給用戶變量的十六進制或位值被視為二進制字符串。要將十六進制或位值作為數字分配給用戶變量,可以使用加0或使用CAST(… AS UNSIGNED)的方式 例子來自mysql官方手冊
mysql> SET @v1 = X'41'; mysql> SET @v2 = X'41'+0; mysql> SET @v3 = CAST(X'41' AS UNSIGNED); mysql> SELECT @v1, @v2, @v3; +------+------+------+ | @v1 | @v2 | @v3 | +------+------+------+ | A | 65 | 65 | +------+------+------+ mysql> SET @v1 = b'1000001'; mysql> SET @v2 = b'1000001'+0; mysql> SET @v3 = CAST(b'1000001' AS UNSIGNED); mysql> SELECT @v1, @v2, @v3; +------+------+------+ | @v1 | @v2 | @v3 | +------+------+------+ | A | 65 | 65 | +------+------+------+
- 變量不要連續使用 這種情況在手冊已經指出來了,如圖腳本:
mysql> SET @a:='test'; mysql> SELECT @a,(@a:=20)
可以查詢出來,發現第一個變量還是』test』字符串,而第二個字符串卻是另外一個值
【用戶變量案例】:
介紹一下,變量來做類似oracle rownum的用法
oracle原版寫法:
select * from (select id,name from t) where rownum <![CDATA[<=]]> to_number(num);
mysql改寫後的SQL:
SELECT * FROM (SELECT tb.*, @rownum := @rownum + 1 AS rownum FROM (SELECT id, NAME FROM t) tb, (SELECT @rownum := 0) r) AS t WHERE rownum <= CAST(num AS SIGNED INTEGER) ;
二、系統變量
2.1 系統變量簡單介紹
系統變量也稱之為全局變量,系統變量是mysql的一些系統變量參數,一般不要修改,特別是生產環境
2.2 系統變量用法簡介
用戶變量的用法是用@符號,系統變量查詢是用@@符號,參數有很多,比如:
- 查詢MySQL目錄
SELECT @@basedir;

- 查看數據目錄
select @@datadir;
