一.基礎(chǔ)語(yǔ)法
說(shuō)明
delimiter //
一般情況下MYSQL以;結(jié)尾表示確認(rèn)輸入并執(zhí)行語(yǔ)句,但在存儲(chǔ)過(guò)程中;不是表示結(jié)束,因此可以用該命令將;號(hào)改為//表示確認(rèn)輸入并執(zhí)行。
mysql> delimiter // #定義結(jié)束符號(hào)為//
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END;
-> // #//標(biāo)識(shí)存儲(chǔ)過(guò)程結(jié)束
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ; #更換結(jié)束符號(hào)為;
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
1.創(chuàng)建存儲(chǔ)過(guò)程
基本語(yǔ)法
CREATE PROCEDURE PROCEDURE_NAME
(
[in|out|inout] param datatype
)
BEGIN
END;
- IN 輸入?yún)?shù)
表示該參數(shù)的值必須在調(diào)用存儲(chǔ)過(guò)程時(shí)指定,在存儲(chǔ)過(guò)程中修改該參數(shù)的值不能被返回,為默認(rèn)值 - OUT 輸出參數(shù)
該值可在存儲(chǔ)過(guò)程內(nèi)部被改變,并可返回 - INOUT 輸入輸出參數(shù)
調(diào)用時(shí)指定,并且可被改變和返回
2.調(diào)用存儲(chǔ)過(guò)程
CALL PROCEDURE_NAME()
3.刪除存儲(chǔ)過(guò)程
drop procedure sp_name//
說(shuō)明:不能在一個(gè)存儲(chǔ)過(guò)程中刪除另一個(gè)存儲(chǔ)過(guò)程,只能調(diào)用另一個(gè)存儲(chǔ)過(guò)程
4.其他常用命令
顯示數(shù)據(jù)庫(kù)中所有存儲(chǔ)的存儲(chǔ)過(guò)程基本信息,包括所屬數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程名稱(chēng),創(chuàng)建時(shí)間等
show procedure status
顯示某一個(gè)存儲(chǔ)過(guò)程的詳細(xì)信息
show create procedure sp_name
二.數(shù)據(jù)結(jié)構(gòu)
1.變量
自定義變量
語(yǔ)法
DECLARE param INT DEFAULT 100;
變量分為用戶變量和系統(tǒng)變量
- 系統(tǒng)變量又分為會(huì)話和全局級(jí)變量
- 用戶變量名一般以@開(kāi)頭,濫用用戶變量會(huì)導(dǎo)致程序難以理解及管理
用戶變量的使用
--單變量
SELECT 'Hello World' INTO @x;
--多變量
SELECT @LEADER_USER_ID:=GROUP_CONCAT(id),@LEADER_USER_NAME:=GROUP_CONCAT(name) FROM USER_INFO WHERE ORG_ID = 'GUANGDONG';
2.流程控制
- 順序結(jié)構(gòu)
-
分支結(jié)構(gòu)
if
case -
循環(huán)結(jié)構(gòu)
for循環(huán)
while循環(huán)
loop循環(huán)
repeat until循環(huán)
注:
區(qū)塊定義,常用
begin
......
end;
也可以給區(qū)塊起別名,如:
lable:begin
......
end lable;
可以用leave lable;跳出區(qū)塊,執(zhí)行區(qū)塊以后的代碼