一、存储过程简介
- 存储过程是一组为了完成特定功能的SQL语句集合
- 比传统SQL速度更快,执行效率更高
- 存储过程的优点:
- 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
- SQL语句加上控制语句的集合,灵活性高
- 在服务端存储,客户端调用时,降低网络负载
- 可多次重复被调用,可随时修改,不影响客户端调用
- 可完成所有的数据库操作,也可控制数据库的信息访问权限
二、创建存储过程
- 使用CREATE PROCEDURE语句创建存储过程
- 创建存储过程的语法结构
CREATE PROCEDURE <过程名> ([过程参数[,...]]) <过程体> [过程参数[,...]] 格式
[IN|OUT|INOUT] <参数名> <类型>
- 参数分为:
- 输入参数:IN
- 输出参数:OUT
- 输入/输出参数:INOUT
- 存储过程的主题部分,被称为过程体
- 以BEGIN开始,以END结束,若只有一条SQL语句,则可以省略BEGIN-END
- 以DELIMITER开始和结束
mysql> DELIMITER $$ //$$是用户自定义的结束符
//省略存储过程其他步骤
mysql> DELIMITER; //分号前有空格
- 调用存储过程
call 存储过程名(实际参数);
- 查询存储过程
show procedure status where db='数据库';
- 删除存储过程
drop procedure 存储过程名;
例:
mysql> delimiter $$ ## 创建存储过程
mysql> create procedure myrole()
-> begin
-> select name,id from info;
-> end$$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> show procedure status where db='school'; ## 查看已创建的存储过程
+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| school | myrole | PROCEDURE | root@localhost | 2020-08-28 21:46:04 | 2020-08-28 21:46:04 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |
| school | role | PROCEDURE | root@localhost | 2020-08-28 21:26:08 | 2020-08-28 21:26:08 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |
+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
mysql> call myrole(); ## 调用存储过程
+------+----+
| name | id |
+------+----+
| tom | 1 |
| | 2 |
| NULL | 3 |
+------+----+
3 rows in set (0.00 sec)