存储过程
相比Oracle, MySQL中很少使用存储过程。
1. 概述
- 存储在数据库端的一组SQL语句集
- 用户可以通过存储过程名和传参多次调用的程序模块
- 存储过程的特点:
- 使用灵活,可以使用流控制语句、自定义变量等完成复杂的业务逻辑
- 提高数据安全性,屏蔽应用程序直接对表的操作,易于进行审计
- 减少网络传输
- 但是提高代码维护的复杂度,实际使用中要评估场景是否适合
1. 存储过程之流控制
| 流程控制 | 语法 |
|---|---|
| if | IF search _condition THEN statement list [ELSElF search condition THEN statement list] [ELSE statement list] END IF |
| case | CASE case__value WHEN when_value THEN statement list [ELSE statement_list] END CASE |
| while | WHILE search_condition DO statement list END WHILE |
| repeat | REPEAT statement listUNTlL search condition END REPEAT |
2. 存储过程之基本语法

3. 存储过程之实操
3.1 创建存储过程
sql
DELIMITER //
create procedure sql_trains.proc_test1(in total int, out res int)
begin
declare i int;
set i=1;
set res = 1;
if total <= 0 then
set total = 1;
end if;
while i <= total do
set res = res * i;
insert into sql_trains.tbl_proc_test values (res);
set i=i+1;
end while;
select max(num) from sql_trains.tbl_proc_test;
end; //
delimiter ;其中使用delimiter定义语句结束符不再是;结尾,避免语句块录入时被误认为是单个sql。
sql
call sql_trains.proc_test1(10, @a);
-- 获取结果
select @a;3.2 查询存储过程
sql
-- 查询具体存储过程状态
show procedure status like '%proc%';
-- 查询具体存储过程信息
select * from information_schema.routines where routine_schema='sql_trains';
-- 在mysql5.7之前,存储过程信息存放在 mysql.proc 表中
SELECT * FROM mysql.proc WHERE db = 'sql_trains;