在select 語句中賦值給用戶變量的語法是 @ var_name := value ,這里的var_name 是變量名,value是正檢索的值.
公司主營業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出古丈免費(fèi)做網(wǎng)站回饋大家。
1:變量可以用在以后語句中表達(dá)式可用的任何地方,例如where字句或者insert 語句中。
例如select @id :=cust_id from customers where cust_id='customer name';
delete from orders where cust_id = @id;
2:變量的另一個(gè)用途是保存在一個(gè)auto_increment列的表中 插入新的一行后last_insert_id()的結(jié)果
select @last_id :=Last_INSERT_ID();
LAST_INSERT_ID()返回新的AUTO_INCREMENT列值,通過將其保存在變量中,你可以在之后的語句中多次引用該值。
即使發(fā)起其他的語句創(chuàng)建他們自身的atuo_increment值,從而改變了last_insert_id()返回的值
3:用戶變量擁有單一的值,如果使用返回多行的語句來將值賦給一個(gè)變量,那么只有最后一行的值被賦給了該變量。
4:要將一個(gè)變量顯示地設(shè)為一個(gè)特定值,使用set語句,set語法可以使用:=或者=來進(jìn)行賦值
5:set也可以用來將一個(gè)select的結(jié)果賦給一個(gè)變量.
一般沒有這種做法的, 列表名或者說字段名都是在設(shè)計(jì)表的時(shí)候固定設(shè)計(jì)好了, 如果動態(tài)添加的話指不定什么時(shí)候表就因?yàn)樽侄翁喑霈F(xiàn)什么不可預(yù)測的問題了來
不過一般你可以變相使用行做動態(tài)數(shù)據(jù), 例如設(shè)計(jì)一個(gè)表, 字段有id(自增), field_name(存儲列表名), filed_value(存儲列表值), 達(dá)成同樣的目的
到時(shí)候只要插入相應(yīng)的行數(shù)據(jù)就可以了, 而不必改變表結(jié)構(gòu)
下面是一個(gè)簡單的 存儲過程的例子.
DECLARE v_index INT;
定義一個(gè) 名稱為 v_index 的變量, 類型為 INT
MYSQL 變量定義應(yīng)該只能在 存儲過程, 函數(shù)里面定義.
不像 Oracle / SQL Server , 一個(gè) 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變量的術(shù)語分類:
1.用戶變量:以"@"開始,形式為"@變量名"
用戶變量跟mysql客戶端是綁定的,設(shè)置的變量,只對當(dāng)前用戶使用的客戶端生效
2.全局變量:定義時(shí),以如下兩種形式出現(xiàn),set
GLOBAL
變量名
或者
set
@@global.變量名,對所有客戶端生效。只有具有super權(quán)限才可以設(shè)置全局變量
3.會話變量:只對連接的客戶端有效。
4.局部變量:作用范圍在begin到end語句塊之間。在該語句塊里設(shè)置的變量
declare語句專門用于定義局部變量。set語句是設(shè)置不同類型的變量,包括會話變量和全局變量
通俗理解術(shù)語之間的區(qū)別:
用戶定義的變量就叫用戶變量。這樣理解的話,會話變量和全局變量都可以是用戶定義的變量。只是他們是對當(dāng)前客戶端生效還是對所有客戶端生效的區(qū)別了。所以,用戶變量包括了會話變量和全局變量
局部變量與用戶變量的區(qū)分在于兩點(diǎn):
1.
用戶變量是以"@"開頭的。局部變量沒有這個(gè)符號。
2.
定義變量不同。用戶變量使用set語句,局部變量使用declare語句定義
3.
作用范圍。局部變量只在begin-end語句塊之間有效。在begin-end語句塊運(yùn)行完之后,局部變量就消失了。
所以,最后它們之間的層次關(guān)系是:變量包括局部變量和用戶變量。用戶變量包括會話變量和全局變量。
使用備忘,set
@var
若沒有指定GLOBAL
或SESSION
,那么默認(rèn)將會定義用戶變量
兩種方式定義用戶變量:
1."=",如
set
@a
=3,@a:=5
2.":="。select常常這樣使用
總結(jié):使用select
和set設(shè)置變量的區(qū)別,set可以使用以上兩種形式設(shè)置變量。而select只能使用":="的形式設(shè)置變量
實(shí)踐積累:用戶變量在mysql客戶端退出后,會自動消失。之后我打開客戶端,使用"select
@a;"
顯示變了的值為null。說明,未定義的變量初始化是null
實(shí)際中的問題
設(shè)置常量對group_concat()的配置影響:
SET
@@GROUP_CONCAT_MAX_LEN=4
手冊中提到設(shè)置的語法是這樣的:
SET
[SESSION
|
GLOBAL]
group_concat_max_len
=
val;
以下兩種形式都能達(dá)到達(dá)到同樣的效果,但是有什么區(qū)別?
SET
@@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就變成了:SET
@@GROUP_CONCAT_MAX_LEN=4;
2011.2.25
之前的理解不怎么準(zhǔn)確?,F(xiàn)在對加深理解后的地方進(jìn)行總結(jié)。
mysql中變量的層次關(guān)系是:大體包括用戶變量和系統(tǒng)變量。系統(tǒng)變量包括系統(tǒng)會話變量和系統(tǒng)全局變量。
相互之間的區(qū)別:
因?yàn)橛脩糇兞烤褪怯脩舳x的變量,系統(tǒng)變量就是mysql定義和維護(hù)的變量。所以,用戶變量與系統(tǒng)變量的區(qū)別在于,是誰在管理這些變量。mysql一啟動的時(shí)候就會讀取系統(tǒng)變量(這樣做目的是可以確定mysql的以何種機(jī)制或模式運(yùn)行)。
系統(tǒng)會話變量與用戶變量都是在當(dāng)前客戶端退出后消失。他們之間的區(qū)別可以這樣理解,雖然常??吹?set
@@varible"的形式去改變系統(tǒng)變量的值,但是并不涉及到定義系統(tǒng)變量。用戶變量是可以自己定義(初始化)。系統(tǒng)變量按照只是在改變值。
局部變量只在begin-end語句塊中定義并有效。執(zhí)行到該語句塊之后就消失了。定義的方式有明顯的特點(diǎn),使用declare語句。
使用系統(tǒng)變量理論上是可以使用兩種形式:
1.
前面帶有符號"@@"
2.
符號省略。比如我會看的如下形式:CURRENT_USER。但是,約定系統(tǒng)變量要使用"@@變量名"的形式,就是在前面加上符號"@@"
分享名稱:mysql怎么創(chuàng)建變量名,mysql變量名命名方式
網(wǎng)頁地址:http://aaarwkj.com/article22/dssjsjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站收錄、網(wǎng)站制作、微信小程序、App開發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)