溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

mysql存儲(chǔ)過(guò)程有哪些變量類(lèi)型

發(fā)布時(shí)間:2022-05-16 10:36:05 來(lái)源:億速云 閱讀:2119 作者:zzz 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要講解了“mysql存儲(chǔ)過(guò)程有哪些變量類(lèi)型”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“mysql存儲(chǔ)過(guò)程有哪些變量類(lèi)型”吧!

mysql存儲(chǔ)過(guò)程的變量類(lèi)型:1、局部變量,定義語(yǔ)法為“DECLARE 變量名 數(shù)據(jù)類(lèi)型”;2、用戶(hù)變量,定義語(yǔ)法為“set @變量名:=...”;3、系統(tǒng)變量,可分為全局變量“@@global”和會(huì)話(huà)變量“@@session”。

本教程操作環(huán)境:windows10系統(tǒng)、mysql8.0.22版本、Dell G3電腦。

mysql存儲(chǔ)過(guò)程有什么變量類(lèi)型

MySQL存儲(chǔ)過(guò)程常見(jiàn)的變量:局部變量、用戶(hù)變量、系統(tǒng)變量

一、局部變量

在過(guò)程體中,可以聲明局部變量,用來(lái)臨時(shí)保存一些值。

1、定義局部變量語(yǔ)法:

DECLARE  var_name[, var_name] ...  type [DEFAULT value];

其中,type為MySQL的數(shù)據(jù)類(lèi)型,如:int、float、date、varchar(length)

注意:

①DECLARE用來(lái)聲明局部變量,且DECLARE僅被用在BEGIN ... END復(fù)合語(yǔ)句里,并且必須在復(fù)合語(yǔ)句的開(kāi)頭,在任何其它語(yǔ)句之前;可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。

②如果要給變量提供一個(gè)默認(rèn)值,使用DEFAULT子句(值可以是常數(shù),也可以指定為一個(gè)表達(dá)式);如果沒(méi)有DEFAULT子句,初始值為NULL。

2、基本格式:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])
BEGIN
DECLARE var_name1 type [DEFAULT value];
DECLARE var_name2 type [DEFAULT value];
DECLARE……;
[characteristic ...];

例1:創(chuàng)建過(guò)程,為局部變量指定默認(rèn)值,并調(diào)用該過(guò)程

mysql>delimiter $$
mysql> create procedure test1(out num1 int)->begin-> declare num2 int default 100;-> set num1=num2;->end->$$
mysql>delimiter ;
mysql>call test1(@num);
mysql> select@num;+------+
| @num |
+------+
| 100 |
+------+

解析:

創(chuàng)建test1存儲(chǔ)過(guò)程:輸出的是num1變量的值,聲明局部變量num2是int類(lèi)型、默認(rèn)值是100,用set將num2的值(未處理,則默認(rèn)值)賦給num1;

調(diào)用test1:用用戶(hù)變量num去接收存儲(chǔ)過(guò)程的輸出值num1……

默認(rèn)值除了字面量,還可以是復(fù)雜的表達(dá)式,包括標(biāo)量子查詢(xún)

例2:創(chuàng)建過(guò)程,使用所有球員的數(shù)量來(lái)初始化一個(gè)變量

mysql>delimiter $$
mysql> create procedure test2(out num1 int)->begin-> declare num2 int default(select count(*) fromPLAYERS);-> set num1=num2;->end$$mysql>delimiter ;
mysql>call test2(@num);mysql> select@num;+------+
| @num |
+------+
| 14 |
+------+

注意:MySQL不支持?jǐn)?shù)組作為局部變量。

3、局部變量的作用域:

也就是變量能正常使用而不出錯(cuò)的程序塊的范圍。

在嵌套塊的情況下,

在外部塊中聲明的變量可以在內(nèi)部塊中直接使用;

在內(nèi)部塊中聲明的變量只能在內(nèi)部塊中使用。

mysql存儲(chǔ)過(guò)程有哪些變量類(lèi)型

解析:變量v2只能用在內(nèi)部塊b2中,塊b3中的set語(yǔ)句和最后一條set語(yǔ)句都是錯(cuò)誤的。

二、用戶(hù)變量

>用戶(hù)變量與數(shù)據(jù)庫(kù)連接有關(guān):在當(dāng)前連接中聲明的變量,在連接斷開(kāi)的時(shí)候,就會(huì)消失;在此連接中聲明的變量無(wú)法在另一連接中使用。

>一個(gè)@符號(hào)表示的就是用戶(hù)變量。

1、用戶(hù)變量的定義(set、select):

1)set語(yǔ)句為用戶(hù)變量賦值:

可以使用“=”或“:=”作為分配符;

分配給每個(gè)變量的expr可以為整數(shù)、實(shí)數(shù)、字符串或者NULL值;

mysql> set @zjc:=999;
mysql> select@zjc;+------+
| @zjc |
+------+
| 999 |
+------+

2)select語(yǔ)句為用戶(hù)變量賦值:

分配符必須為“:=”而不能用“=”,因?yàn)樵诜荢ET語(yǔ)句中=被視為一個(gè)比較操作符;

mysql> select @abc:=123;+-----------+
| @abc:=123 |
+-----------+
| 123 |
+-----------+mysql> select@abc;+------+
| @abc |
+------+
| 123 |
+------+

注意:

①用戶(hù)變量隨處可以定義,隨處可以使用;不定義可以直接使用(值默認(rèn)為null)。

②用戶(hù)變量的變量名的形式:@var_name,要有@符號(hào)。

③濫用用戶(hù)變量會(huì)導(dǎo)致程序難以理解及管理。

拓展之變量賦值:set語(yǔ)法

MySQL里面的變量是不嚴(yán)格限制數(shù)據(jù)類(lèi)型的,變量的數(shù)據(jù)類(lèi)型根據(jù)賦給變量的值而隨時(shí)變化。

SET variable_assignment [, variable_assignment] ...
variable_assignment:
user_var_name=expr|[GLOBAL | SESSION] system_var_name =expr|[@@global. | @@session. | @@] system_var_name = expr

##用來(lái)給用戶(hù)變量、系統(tǒng)變量賦值,也可以給過(guò)程中的局部變量賦值。

注意:

set系統(tǒng)變量時(shí),不帶作用域修飾,默認(rèn)是指會(huì)話(huà)作用域;

(特別注意,有些系統(tǒng)變量不帶作用域修飾,無(wú)法設(shè)置,因此最好都帶上作用域設(shè)置系統(tǒng)變量)。

2、用戶(hù)變量的作用域

只要是在當(dāng)前連接定義的用戶(hù)變量,在當(dāng)前連接里用都是OK的,除此之外都不行。

3、與局部變量區(qū)別:

局部變量只有變量名字,沒(méi)有@符號(hào);用戶(hù)變量名前有@符號(hào)。

都是先定義,再使用;未定義的變量,select值為空。

局部變量只在存儲(chǔ)過(guò)程內(nèi)部使用,在過(guò)程體外是沒(méi)有意義的,當(dāng)begin-end塊處理完后,局部變量就消失;而用戶(hù)變量可以用在存儲(chǔ)過(guò)程的內(nèi)部和外部。

Tips:在存儲(chǔ)過(guò)程內(nèi)部,使用局部變量,不要使用用戶(hù)變量。

三、MySQL變量之用戶(hù)變量與系統(tǒng)變量

1、用戶(hù)變量如上所述@var_name(一個(gè)@符號(hào))

①用戶(hù)變量和數(shù)據(jù)庫(kù)連接有關(guān),連接后聲明變量,連接斷開(kāi)后,自動(dòng)消失;

②select一個(gè)沒(méi)有賦值的用戶(hù)變量,返回NULL,也就是沒(méi)有值;

Mysql的變量類(lèi)似于動(dòng)態(tài)語(yǔ)言,變量的值隨所要賦的值的類(lèi)型而改變。

2、系統(tǒng)變量:根據(jù)系統(tǒng)變量的作用域分為:全局變量與會(huì)話(huà)變量(兩個(gè)@符號(hào))

①全局變量(@@global.)

在MySQL啟動(dòng)的時(shí)候由服務(wù)器自動(dòng)將全局變量初始化為默認(rèn)值;

全局變量的默認(rèn)值可以通過(guò)更改MySQL配置文件(my.ini、my.cnf)來(lái)更改。

②會(huì)話(huà)變量(@@session.)

在每次建立一個(gè)新的連接的時(shí)候,由MySQL來(lái)初始化;

MYSQL會(huì)將當(dāng)前所有全局變量的值復(fù)制一份來(lái)做為會(huì)話(huà)變量(也就是說(shuō),如果在建立會(huì)話(huà)以后,沒(méi)有手動(dòng)更改過(guò)會(huì)話(huà)變量與全局變量的值,那所有這些變量的值都是一樣的)。

#全局變量與會(huì)話(huà)變量的區(qū)別:對(duì)全局變量的修改會(huì)影響到整個(gè)服務(wù)器,但是對(duì)會(huì)話(huà)變量的修改,只會(huì)影響到當(dāng)前的會(huì)話(huà)。

感謝各位的閱讀,以上就是“mysql存儲(chǔ)過(guò)程有哪些變量類(lèi)型”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)mysql存儲(chǔ)過(guò)程有哪些變量類(lèi)型這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI