一、局部變量

成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)巫山,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
局部變量一般用在sql語(yǔ)句塊中,比如存儲(chǔ)過(guò)程的begin/end。其作用域僅限于該語(yǔ)句塊,在該語(yǔ)句塊執(zhí)行完畢后,局部變量就消失了。
局部變量一般用declare來(lái)聲明,可以使用default來(lái)說(shuō)明默認(rèn)值。
二、用戶變量
用戶變量的作用域要比局部變量要廣。用戶變量可以作用于當(dāng)前整個(gè)連接,但是當(dāng)當(dāng)前連接斷開(kāi)后,其所定義的用戶變量都會(huì)消失。
用戶變量使用如下(這里我們無(wú)須使用declare關(guān)鍵字進(jìn)行定義,可以直接這樣使用):
select @變量名
對(duì)用戶變量賦值有兩種方式,一種是直接用"="號(hào),另一種是用":="號(hào)。其區(qū)別在于使用set命令對(duì)用戶變量進(jìn)行賦值時(shí),兩種方式都可以使用;當(dāng)使用select語(yǔ)句對(duì)用戶變量進(jìn)行賦值時(shí),只能使用":="方式,因?yàn)樵趕elect語(yǔ)句中,"="號(hào)被看作是比較操作符。
String sql="SELECT * FROM `test`.`changetalbe` where HZ= @temp ;";
改為
String sql="SELECT * FROM `test`.`changetalbe` where HZ="+temp;
你原來(lái)那句話里temp后面也多一個(gè)空格。連接變量要用+號(hào)的。不能寫(xiě)在語(yǔ)句內(nèi)部,好像那是C#的語(yǔ)法。
mysql變量的術(shù)語(yǔ)分類(lèi):
1.用戶變量:以"@"開(kāi)始,形式為"@變量名"
用戶變量跟mysql客戶端是綁定的,設(shè)置的變量,只對(duì)當(dāng)前用戶使用的客戶端生效
2.全局變量:定義時(shí),以如下兩種形式出現(xiàn),set
GLOBAL
變量名
或者
set
@@global.變量名,對(duì)所有客戶端生效。只有具有super權(quán)限才可以設(shè)置全局變量
3.會(huì)話變量:只對(duì)連接的客戶端有效。
4.局部變量:作用范圍在begin到end語(yǔ)句塊之間。在該語(yǔ)句塊里設(shè)置的變量
declare語(yǔ)句專(zhuān)門(mén)用于定義局部變量。set語(yǔ)句是設(shè)置不同類(lèi)型的變量,包括會(huì)話變量和全局變量
通俗理解術(shù)語(yǔ)之間的區(qū)別:
用戶定義的變量就叫用戶變量。這樣理解的話,會(huì)話變量和全局變量都可以是用戶定義的變量。只是他們是對(duì)當(dāng)前客戶端生效還是對(duì)所有客戶端生效的區(qū)別了。所以,用戶變量包括了會(huì)話變量和全局變量
局部變量與用戶變量的區(qū)分在于兩點(diǎn):
1.
用戶變量是以"@"開(kāi)頭的。局部變量沒(méi)有這個(gè)符號(hào)。
2.
定義變量不同。用戶變量使用set語(yǔ)句,局部變量使用declare語(yǔ)句定義
3.
作用范圍。局部變量只在begin-end語(yǔ)句塊之間有效。在begin-end語(yǔ)句塊運(yùn)行完之后,局部變量就消失了。
所以,最后它們之間的層次關(guān)系是:變量包括局部變量和用戶變量。用戶變量包括會(huì)話變量和全局變量。
使用備忘,set
@var
若沒(méi)有指定GLOBAL
或SESSION
,那么默認(rèn)將會(huì)定義用戶變量
兩種方式定義用戶變量:
1."=",如
set
@a
=3,@a:=5
2.":="。select常常這樣使用
總結(jié):使用select
和set設(shè)置變量的區(qū)別,set可以使用以上兩種形式設(shè)置變量。而select只能使用":="的形式設(shè)置變量
實(shí)踐積累:用戶變量在mysql客戶端退出后,會(huì)自動(dòng)消失。之后我打開(kāi)客戶端,使用"select
@a;"
顯示變了的值為null。說(shuō)明,未定義的變量初始化是null
實(shí)際中的問(wèn)題
設(shè)置常量對(duì)group_concat()的配置影響:
SET
@@GROUP_CONCAT_MAX_LEN=4
手冊(cè)中提到設(shè)置的語(yǔ)法是這樣的:
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)確。現(xiàn)在對(duì)加深理解后的地方進(jìn)行總結(jié)。
mysql中變量的層次關(guān)系是:大體包括用戶變量和系統(tǒng)變量。系統(tǒng)變量包括系統(tǒng)會(huì)話變量和系統(tǒng)全局變量。
相互之間的區(qū)別:
因?yàn)橛脩糇兞烤褪怯脩舳x的變量,系統(tǒng)變量就是mysql定義和維護(hù)的變量。所以,用戶變量與系統(tǒng)變量的區(qū)別在于,是誰(shuí)在管理這些變量。mysql一啟動(dòng)的時(shí)候就會(huì)讀取系統(tǒng)變量(這樣做目的是可以確定mysql的以何種機(jī)制或模式運(yùn)行)。
系統(tǒng)會(huì)話變量與用戶變量都是在當(dāng)前客戶端退出后消失。他們之間的區(qū)別可以這樣理解,雖然常常看到"set
@@varible"的形式去改變系統(tǒng)變量的值,但是并不涉及到定義系統(tǒng)變量。用戶變量是可以自己定義(初始化)。系統(tǒng)變量按照只是在改變值。
局部變量只在begin-end語(yǔ)句塊中定義并有效。執(zhí)行到該語(yǔ)句塊之后就消失了。定義的方式有明顯的特點(diǎn),使用declare語(yǔ)句。
使用系統(tǒng)變量理論上是可以使用兩種形式:
1.
前面帶有符號(hào)"@@"
2.
符號(hào)省略。比如我會(huì)看的如下形式:CURRENT_USER。但是,約定系統(tǒng)變量要使用"@@變量名"的形式,就是在前面加上符號(hào)"@@"
分享標(biāo)題:mysql變量怎么用,MySQL定義變量
轉(zhuǎn)載注明:http://chinadenli.net/article25/dsgjoci.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、搜索引擎優(yōu)化、ChatGPT、網(wǎng)站改版、電子商務(wù)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容