一.基础语法
说明
delimiter //
一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;不是表示结束,因此可以用该命令将;号改为//表示确认输入并执行。
mysql> delimiter // #定义结束符号为//
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END;
-> // #//标识存储过程结束
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ; #更换结束符号为;
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.创建存储过程
基本语法
CREATE PROCEDURE PROCEDURE_NAME
(
[in|out|inout] param datatype
)
BEGIN
END;
- IN 输入参数
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 - OUT 输出参数
该值可在存储过程内部被改变,并可返回 - INOUT 输入输出参数
调用时指定,并且可被改变和返回
2.调用存储过程
CALL PROCEDURE_NAME()
3.删除存储过程
drop procedure sp_name//
说明:不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
4.其他常用命令
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
show procedure status
显示某一个存储过程的详细信息
show create procedure sp_name
二.数据结构
1.变量
自定义变量
语法
DECLARE param INT DEFAULT 100;
变量分为用户变量和系统变量
- 系统变量又分为会话和全局级变量
- 用户变量名一般以@开头,滥用用户变量会导致程序难以理解及管理
用户变量的使用
--单变量
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.流程控制
- 顺序结构
-
分支结构
if
case -
循环结构
for循环
while循环
loop循环
repeat until循环
注:
区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
......
end lable;
可以用leave lable;跳出区块,执行区块以后的代码