本文內容: 系統變數 用戶變數 局部變數 局部變數 首發日期:2018-04-18 系統變數: 系統變數就是系統已經提前定義好了的變數 系統變數一般都有其特殊意義。比如某些變數代表字元集、某些變數代表某些mysql文件位置 系統變數中包括會話級變數(當次會話連接生效的變數,如names),以及全局變 ...
本文內容:
- 系統變數
- 用戶變數
- 局部變數
首發日期:2018-04-18
系統變數:
- 系統變數就是系統已經提前定義好了的變數
- 系統變數一般都有其特殊意義。比如某些變數代表字元集、某些變數代表某些mysql文件位置
- 系統變數中包括會話級變數(當次會話連接生效的變數,如names),以及全局變數(一直生效的變數) 【系統變數中全局變數和會話變數其實是使用一套變數,不同的是會話變數僅當次會話生效。】
-
- 會話變數的賦值:set 變數名 = 值; 【比如常用的set names ="utf8";】或者set @@變數名=值
- 全局變數的賦值:set global 變數名 = 值;
查看系統變數:
- show variables;
系統變數的調用:
- select @@變數名;
用戶變數:
- 用戶變數就是用戶自己定義的變數。
- 系統為了區別系統變數跟自定義變數,規定用戶自定義變數必須使用一個@符號
- 變數的定義方式:
set @變數名=1
- select @變數名:=值;
- select 值 into @變數名;
- 用戶變數可以不聲明定義,就可以直接使用,不過預設是null值
- 用戶變數都是會話級的變數,僅在當次連接中生效。
局部變數:
- 由於局部變數是用戶自定義的,可以認為局部變數也是用戶變數【但有所不同,局部中不需要使用@】
- 局部變數一般用在sql語句塊中,比如存儲過程塊、觸發器塊等
- 局部變數的定義方法:
-
- 先使用declare聲明局部變數,其中可選項default後面可以跟一個付給變數的預設值:【非常重要的一步,不然會設置成用戶變數】【註意:變數聲明語句要在其他語句如select語句之前】
- 示例:declare myq int;
- 示例:declare myq int default 666;
- 設置變數的值:
- set 變數名= 值;
- 獲取變數的值:
- select 變數名;
create procedure myset() begin declare mya int; declare myq int default 777; select mya,myq; set myq=6; set mya=666; select mya,myq; end; call myset();
補充:
- 有些人可能會發現直接set 變數名=值;也可以定義“用戶變數”;但這是一種不好的行為【這種行為忽略了各自變數的功能】,因為你不知道會不會跟系統變數衝突,所以最好用戶變數加上@
- 因為 = ,有很多地方都用來判斷是否等於,為了避免歧義,也可以使用:=來賦值
- 【上面雖然給了一些其他的賦值方法,但好像有一些是不通用的,比如:=只用於用戶變數,所以要審慎使用】。