(10)mysql 中的變量

定義變量

語法以下html

declare var_name[,...] type [default value];複製代碼

MYSQL 變量定義只能在存儲過程或函數裏面定義,不像 Oracle / SQL Server。該變量的做用範圍只能在begin...end塊中。變量定義必須寫在複合語句的開頭,而且在任何其餘語句的前面。能夠一次聲明多個相同類型的變量。可使用default賦默認值。declare只能用在局部變量定義中。sql

#舉例
declare v_test int default 10;複製代碼

設置變量

方式一服務器

set var_name=expr,[,var_name2=expr ...];

#舉例
set v_test=15;複製代碼

方式二session

select col_name[,...] into var_name[,...] table_expr;

#舉例
select sid into @a from test1;複製代碼

若是col_name(如sid)返回多行值,@a最後只會去最後一行值。函數

變量分類

局部變量(不須要加@)

局部變量通常用在sql語句塊中,好比存儲過程的begin/end。其做用域僅限於該語句塊,在該語句塊執行完畢後,局部變量就消失了。局部變量通常用declare來聲明,可使用default來講明默認值。spa

create procedure add(in a int,in b int)
begin
    declare c int default 0;#c定義的局部變量
    set c = a + b;
    select c as c;
end;複製代碼

用戶變量(一個@)

用戶變量的做用域要比局部變量要廣。用戶變量能夠做用於當前整個鏈接,可是噹噹前鏈接斷開後,其所定義的用戶變量都會消失。
用戶變量使用以下的方式定義:@變量名.net

#舉例
set @a = 1;
set @b = 2;
select @sum:=(@a + @b), @dif:=(@a - @b);複製代碼

結果
命令行

用戶變量

會話變量(兩個@@)

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

#設置會話變量有以下三種方式:
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%";複製代碼

全局變量(兩個@@)

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

#要設置一個全局變量,有以下兩種方式:
set global var_name = value; 
set @@global.var_name = value; //同上

#要想查看一個全局變量,有以下兩種方式:
select @@global.var_name;
show global variables like "%var%";複製代碼

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

##參考
blog.csdn.net/lxgwm2008/a…
www.cnblogs.com/qixuejia/ar…

相關文章
相關標籤/搜索