天天看點

MySql中的變量定義

一、局部變量。

局部變量一般用在sql語句塊中,比如存儲過程的begin/end。其作用域僅限于該語句塊,在該語句塊執行完畢後,局部變量就消失了。

局部變量一般用declare來聲明,可以使用default來說明預設值。

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

drop procedure if exists add;

create procedure add

(

    in a int,

    in b int

)

begin

    declare c int default 0;

    set c = a + b;

    select c as c;

end;

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

二、使用者變量。

使用者變量的作用域要比局部變量要廣。使用者變量可以作用于目前整個連接配接,但是當目前連接配接斷開後,其所定義的使用者變量都會消失。

使用者變量使用如下(這裡我們無須使用declare關鍵字進行定義,可以直接這樣使用):

select @變量名

對使用者變量指派有兩種方式,一種是直接用"="号,另一種是用":="号。其差別在于使用set指令對使用者變量進行指派時,兩種方式都可以使用;當使用select語句對使用者變量進行指派時,隻能使用":="方式,因為在select語句中,"="号被看作是比較操作符。

示例程式如下:

drop procedure if exists math;

create procedure math

    set @var1 = 1;

    set @var2 = 2;

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

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     | 

mysql> select @var2; //var2為使用者變量

| @var2 |

| 2     | 

3、會話變量

伺服器為每個連接配接的用戶端維護一系列會話變量。在用戶端連接配接時,使用相應全局變量的目前值對用戶端的會話變量進行初始化。設定會話變量不需要特殊權限,但用戶端隻能更改自己的會話變量,而不能更改其它用戶端的會話變量。會話變量的作用域與使用者變量一樣,僅限于目前連接配接。當目前連接配接斷開後,其設定的所有會話變量均失效。

設定會話變量有如下三種方式:

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;

4、全局變量

全局變量影響伺服器整體操作。當伺服器啟動時,它将所有全局變量初始化為預設值。這些預設值可以在選項檔案中或在指令行中指定的選項進行更改。要想更改全局變量,必須具有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;

本文轉自神ge 51CTO部落格,原文連結:http://blog.51cto.com/12218412/1897313