在select 語句中賦值給用戶變量的語法是 @ var_name := value ,這里的var_name 是變量名,value是正檢索的值.
公司主營業(yè)務:網站制作、成都網站設計、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現互聯網宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯公司推出古丈免費做網站回饋大家。
1:變量可以用在以后語句中表達式可用的任何地方,例如where字句或者insert 語句中。
例如select @id :=cust_id from customers where cust_id='customer name';
delete from orders where cust_id = @id;
2:變量的另一個用途是保存在一個auto_increment列的表中 插入新的一行后last_insert_id()的結果
select @last_id :=Last_INSERT_ID();
LAST_INSERT_ID()返回新的AUTO_INCREMENT列值,通過將其保存在變量中,你可以在之后的語句中多次引用該值。
即使發(fā)起其他的語句創(chuàng)建他們自身的atuo_increment值,從而改變了last_insert_id()返回的值
3:用戶變量擁有單一的值,如果使用返回多行的語句來將值賦給一個變量,那么只有最后一行的值被賦給了該變量。
4:要將一個變量顯示地設為一個特定值,使用set語句,set語法可以使用:=或者=來進行賦值
5:set也可以用來將一個select的結果賦給一個變量.
一般沒有這種做法的, 列表名或者說字段名都是在設計表的時候固定設計好了, 如果動態(tài)添加的話指不定什么時候表就因為字段太多出現什么不可預測的問題了來
不過一般你可以變相使用行做動態(tài)數據, 例如設計一個表, 字段有id(自增), field_name(存儲列表名), filed_value(存儲列表值), 達成同樣的目的
到時候只要插入相應的行數據就可以了, 而不必改變表結構
下面是一個簡單的 存儲過程的例子.
DECLARE v_index INT;
定義一個 名稱為 v_index 的變量, 類型為 INT
MYSQL 變量定義應該只能在 存儲過程, 函數里面定義.
不像 Oracle / SQL Server , 一個 BEGIN / END 里面就可以定義/執(zhí)行了。
mysql DELIMITER //
mysql CREATE PROCEDURE TestWhile()
- BEGIN
- DECLARE v_index INT;
-
- SET v_index = 0;
-
- WHILE v_index 5 DO
- SET v_index = v_index + 1;
- SELECT v_index;
- END WHILE;
-
- END//
Query OK, 0 rows affected (0.00 sec)
mysql變量的術語分類:
1.用戶變量:以"@"開始,形式為"@變量名"
用戶變量跟mysql客戶端是綁定的,設置的變量,只對當前用戶使用的客戶端生效
2.全局變量:定義時,以如下兩種形式出現,set
GLOBAL
變量名
或者
set
@@global.變量名,對所有客戶端生效。只有具有super權限才可以設置全局變量
3.會話變量:只對連接的客戶端有效。
4.局部變量:作用范圍在begin到end語句塊之間。在該語句塊里設置的變量
declare語句專門用于定義局部變量。set語句是設置不同類型的變量,包括會話變量和全局變量
通俗理解術語之間的區(qū)別:
用戶定義的變量就叫用戶變量。這樣理解的話,會話變量和全局變量都可以是用戶定義的變量。只是他們是對當前客戶端生效還是對所有客戶端生效的區(qū)別了。所以,用戶變量包括了會話變量和全局變量
局部變量與用戶變量的區(qū)分在于兩點:
1.
用戶變量是以"@"開頭的。局部變量沒有這個符號。
2.
定義變量不同。用戶變量使用set語句,局部變量使用declare語句定義
3.
作用范圍。局部變量只在begin-end語句塊之間有效。在begin-end語句塊運行完之后,局部變量就消失了。
所以,最后它們之間的層次關系是:變量包括局部變量和用戶變量。用戶變量包括會話變量和全局變量。
使用備忘,set
@var
若沒有指定GLOBAL
或SESSION
,那么默認將會定義用戶變量
兩種方式定義用戶變量:
1."=",如
set
@a
=3,@a:=5
2.":="。select常常這樣使用
總結:使用select
和set設置變量的區(qū)別,set可以使用以上兩種形式設置變量。而select只能使用":="的形式設置變量
實踐積累:用戶變量在mysql客戶端退出后,會自動消失。之后我打開客戶端,使用"select
@a;"
顯示變了的值為null。說明,未定義的變量初始化是null
實際中的問題
設置常量對group_concat()的配置影響:
SET
@@GROUP_CONCAT_MAX_LEN=4
手冊中提到設置的語法是這樣的:
SET
[SESSION
|
GLOBAL]
group_concat_max_len
=
val;
以下兩種形式都能達到達到同樣的效果,但是有什么區(qū)別?
SET
@@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就變成了:SET
@@GROUP_CONCAT_MAX_LEN=4;
2011.2.25
之前的理解不怎么準確?,F在對加深理解后的地方進行總結。
mysql中變量的層次關系是:大體包括用戶變量和系統(tǒng)變量。系統(tǒng)變量包括系統(tǒng)會話變量和系統(tǒng)全局變量。
相互之間的區(qū)別:
因為用戶變量就是用戶定義的變量,系統(tǒng)變量就是mysql定義和維護的變量。所以,用戶變量與系統(tǒng)變量的區(qū)別在于,是誰在管理這些變量。mysql一啟動的時候就會讀取系統(tǒng)變量(這樣做目的是可以確定mysql的以何種機制或模式運行)。
系統(tǒng)會話變量與用戶變量都是在當前客戶端退出后消失。他們之間的區(qū)別可以這樣理解,雖然常??吹?set
@@varible"的形式去改變系統(tǒng)變量的值,但是并不涉及到定義系統(tǒng)變量。用戶變量是可以自己定義(初始化)。系統(tǒng)變量按照只是在改變值。
局部變量只在begin-end語句塊中定義并有效。執(zhí)行到該語句塊之后就消失了。定義的方式有明顯的特點,使用declare語句。
使用系統(tǒng)變量理論上是可以使用兩種形式:
1.
前面帶有符號"@@"
2.
符號省略。比如我會看的如下形式:CURRENT_USER。但是,約定系統(tǒng)變量要使用"@@變量名"的形式,就是在前面加上符號"@@"