MySql中的變量定義


根據MySQL手冊,mysql的變量分爲兩種:系統變量和用戶變量。可是在實際使用中,還會遇到諸如局部變量、會話變量等概念。根據我的感受,mysql變量大致能夠分爲四種類型:mysql

1、局部變量。sql

局部變量通常用在sql語句塊中,好比存儲過程的begin/end。其做用域僅限於該語句塊,在該語句塊執行完畢後,局部變量就消失了。服務器

局部變量通常用declare來聲明,可使用default來講明默認值。session

例如在存儲過程當中定義局部變量:ide

drop procedure if exists add;spa

create procedure add.net

(命令行

    in a int,server

    in b int生命週期

)

begin

    declare c int default 0;

    set c = a + b;

    select c as c;

end;

 

在上述存儲過程當中定義的變量c就是局部變量

 

2、用戶變量。

用戶變量的做用域要比局部變量要廣。用戶變量能夠做用於當前整個鏈接,可是噹噹前鏈接斷開後,其所定義的用戶變量都會消失。

用戶變量使用以下(這裏咱們無須使用declare關鍵字進行定義,能夠直接這樣使用):

select @變量名

對用戶變量賦值有兩種方式,一種是直接用"="號,另外一種是用":="號。其區別在於使用set命令對用戶變量進行賦值時,兩種方式均可以使用;當使用select語句對用戶變量進行賦值時,只能使用":="方式,由於在select語句中,"="號被看做是比較操做符。

示例程序以下:

drop procedure if exists math;

create procedure math

(

    in a int,

    in b int

)

begin

    set @var1 = 1;

    set @var2 = 2;

    select @sum:=(a + b) as sum, @dif:=(a - b) as dif;

end;

 

mysql> call math(3, 4);
+------+------+
| sum  | dif  |
+------+------+
|    7 |   -1 | 
+------+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select @var1; //var1爲用戶變量
+-------+
| @var1 |
+-------+
| 1     | 
+-------+
1 row in set (0.00 sec)

mysql> select @var2; //var2爲用戶變量
+-------+
| @var2 |
+-------+
| 2     | 
+-------+
1 row in set (0.00 sec)

 

三、會話變量

服務器爲每一個鏈接的客戶端維護一系列會話變量。在客戶端鏈接時,使用相應全局變量的當前值對客戶端的會話變量進行初始化。設置會話變量不須要特殊權限,但客戶端只能更改本身的會話變量,而不能更改其它客戶端的會話變量。會話變量的做用域與用戶變量同樣,僅限於當前鏈接。噹噹前鏈接斷開後,其設置的全部會話變量均失效

設置會話變量有以下三種方式:

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%";

mysql> show session variables;

 

四、全局變量

全局變量影響服務器總體操做。當服務器啓動時,它將全部全局變量初始化爲默認值。這些默認值能夠在選項文件中或在命令行中指定的選項進行更改。要想更改全局變量,必須具備SUPER權限。全局變量做用於server的整個生命週期,可是不能跨重啓。即重啓後全部設置的全局變量均失效。要想讓全局變量重啓後繼續生效,須要更改相應的配置文件。

 

要設置一個全局變量,有以下兩種方式:

set global var_name = value; //注意:此處的global不能省略。根據手冊,set命令設置變量時若不指定GLOBAL、SESSION或者LOCAL,默認使用SESSION

set @@global.var_name = value; //同上

 

要想查看一個全局變量,有以下兩種方式:

select @@global.var_name;

show global variables like "%var%";

mysql> show global variables;

相關文章
相關標籤/搜索