1.1存储过程的概述
存储过程(procedure):一组经过预先编译的SQL语句的封装。
执行过程:存储过程预先存储在MySQL服务器上,在需要执行的时候,客户端只需向服务器端发出调用(call)存储过程的命令,服务器就可以把预先存储好的这一系列SQL语句全部执行。
与视图,函数的对比:视图是虚拟表,通常不对底层数据表直接操作。存储过程时程序化的SQL,可以直接操作底层数据表,能够实现一些复杂的数据处理。相较于函数,存储过程是没有返回值。
1.2存储过程的分类
存储过程的参数类型有IN、OUT、INOUT
Ⅰ,没有参数(无参数返回)
Ⅱ,仅带IN类型(有参数无返回)
Ⅲ,仅带OUT类型(无参数有返回)
Ⅳ,既带IN又带OUT(有参数有返回)
Ⅴ,带INOUT(有参数有返回)
1.3存储过程语法
delimiter //
create procedure 存储过程名(IN|OUT|INOUT 参数名 参数类型,....)
begin
存储过程体
end //
delimiter;
MySQL
默认的语句结束符号为分号" ; "
。为了避免与存储过程中
SQL
语句结束符相冲突,需要使用
DELIMITER
改变存储过程的结束符。
1.4存储过程与存储函数的对比
此外,存储函数可以放在查询语句中使用,但存储过程不行。
反之,存储过程能够执行对表操作和事务操作,则存储函数不具备。
1.5关于存储过程使用的优缺点
优点:
- 存储过程可以一次编译多次使用。提高SQL的执行效率。
- 可以减少开发工作量。可将代码封装成模块,模块与模块之间可重复使用。
- 存储过程的安全性强。可设置对用户的使用权限。
- 可以减少网络传输量。
- 良好的封装性。一次存储过程,仅需连接一次。
缺点;
- 可移植性差。存储过程不能跨数据库移植。
- 调式困难。仅有少数DBMS(数据库管理系统)支持存储过程的调式,且收费。
- 存储过程的版本管理很困难。
- 它不适合高并发的场景。
建议:
在阿里开发规范中,【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。