91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql存儲過程有哪些變量類型

發布時間:2022-05-16 10:36:05 來源:億速云 閱讀:2125 作者:zzz 欄目:MySQL數據庫

這篇文章主要講解了“mysql存儲過程有哪些變量類型”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql存儲過程有哪些變量類型”吧!

mysql存儲過程的變量類型:1、局部變量,定義語法為“DECLARE 變量名 數據類型”;2、用戶變量,定義語法為“set @變量名:=...”;3、系統變量,可分為全局變量“@@global”和會話變量“@@session”。

本教程操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。

mysql存儲過程有什么變量類型

MySQL存儲過程常見的變量:局部變量、用戶變量、系統變量

一、局部變量

在過程體中,可以聲明局部變量,用來臨時保存一些值。

1、定義局部變量語法:

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

其中,type為MySQL的數據類型,如:int、float、date、varchar(length)

注意:

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

②如果要給變量提供一個默認值,使用DEFAULT子句(值可以是常數,也可以指定為一個表達式);如果沒有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:創建過程,為局部變量指定默認值,并調用該過程

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 |
+------+

解析:

創建test1存儲過程:輸出的是num1變量的值,聲明局部變量num2是int類型、默認值是100,用set將num2的值(未處理,則默認值)賦給num1;

調用test1:用用戶變量num去接收存儲過程的輸出值num1……

默認值除了字面量,還可以是復雜的表達式,包括標量子查詢

例2:創建過程,使用所有球員的數量來初始化一個變量

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不支持數組作為局部變量。

3、局部變量的作用域:

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

在嵌套塊的情況下,

在外部塊中聲明的變量可以在內部塊中直接使用;

在內部塊中聲明的變量只能在內部塊中使用。

mysql存儲過程有哪些變量類型

解析:變量v2只能用在內部塊b2中,塊b3中的set語句和最后一條set語句都是錯誤的。

二、用戶變量

>用戶變量與數據庫連接有關:在當前連接中聲明的變量,在連接斷開的時候,就會消失;在此連接中聲明的變量無法在另一連接中使用。

>一個@符號表示的就是用戶變量。

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

1)set語句為用戶變量賦值:

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

分配給每個變量的expr可以為整數、實數、字符串或者NULL值;

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

2)select語句為用戶變量賦值:

分配符必須為“:=”而不能用“=”,因為在非SET語句中=被視為一個比較操作符;

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

注意:

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

②用戶變量的變量名的形式:@var_name,要有@符號。

③濫用用戶變量會導致程序難以理解及管理。

拓展之變量賦值:set語法

MySQL里面的變量是不嚴格限制數據類型的,變量的數據類型根據賦給變量的值而隨時變化。

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

##用來給用戶變量、系統變量賦值,也可以給過程中的局部變量賦值。

注意:

set系統變量時,不帶作用域修飾,默認是指會話作用域;

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

2、用戶變量的作用域

只要是在當前連接定義的用戶變量,在當前連接里用都是OK的,除此之外都不行。

3、與局部變量區別:

局部變量只有變量名字,沒有@符號;用戶變量名前有@符號。

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

局部變量只在存儲過程內部使用,在過程體外是沒有意義的,當begin-end塊處理完后,局部變量就消失;而用戶變量可以用在存儲過程的內部和外部。

Tips:在存儲過程內部,使用局部變量,不要使用用戶變量。

三、MySQL變量之用戶變量與系統變量

1、用戶變量如上所述@var_name(一個@符號)

①用戶變量和數據庫連接有關,連接后聲明變量,連接斷開后,自動消失;

②select一個沒有賦值的用戶變量,返回NULL,也就是沒有值;

Mysql的變量類似于動態語言,變量的值隨所要賦的值的類型而改變。

2、系統變量:根據系統變量的作用域分為:全局變量與會話變量(兩個@符號)

①全局變量(@@global.)

在MySQL啟動的時候由服務器自動將全局變量初始化為默認值;

全局變量的默認值可以通過更改MySQL配置文件(my.ini、my.cnf)來更改。

②會話變量(@@session.)

在每次建立一個新的連接的時候,由MySQL來初始化;

MYSQL會將當前所有全局變量的值復制一份來做為會話變量(也就是說,如果在建立會話以后,沒有手動更改過會話變量與全局變量的值,那所有這些變量的值都是一樣的)。

#全局變量與會話變量的區別:對全局變量的修改會影響到整個服務器,但是對會話變量的修改,只會影響到當前的會話。

感謝各位的閱讀,以上就是“mysql存儲過程有哪些變量類型”的內容了,經過本文的學習后,相信大家對mysql存儲過程有哪些變量類型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建德市| 万盛区| 达拉特旗| 广西| 莲花县| 安庆市| 潞城市| 敦煌市| 平江县| 定南县| 聂荣县| 济南市| 南皮县| 北流市| 宣威市| 汕头市| 通渭县| 苍山县| 水富县| 鄯善县| 龙井市| 佳木斯市| 湘乡市| 镇康县| 永宁县| 库伦旗| 敖汉旗| 阳泉市| 南涧| 玛多县| 邛崃市| 云安县| 泰来县| 同仁县| 贵定县| 鹤峰县| 七台河市| 麻阳| 慈利县| 潞城市| 新建县|