特点:
- 封装,复用
- 可以接收参数,也可以返回数据
- 减少网络交互,效率提升
创建:
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
--SQL语句
END;
调用:
CALL 名称([参数]);
查看:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='xxx';
SHOW CREATE PROCEDURE [IF EXISTS] 存储过程名称;
注意:在命令行中执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的结束符。
变量
1.系统变量
系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。
2.用户定义变量
用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@变量名”使用就可以。其作用域为当前连接。
3.局部变量
局部变量是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN...END块。
IF
我们可以编写一个含if的存储过程:
可以看到,得出的结果根据传入的score而有所不同 。
参数
用法:
👆:参数的用法(OUT类型参数为用户定义变量,可直接用@来指定)。
case
👆:case的用法示例。
while
while 循环是有条件的循环控制语句,满足条件后,再执行循环体中的SQL语句。具体语法为:
👆:while用法示例。
repeat
repeat循环是有条件的循环控制语句。当满足条件的时候退出循环。具体语法为:
👆:repeat 用法示例
loop
LOOP实现简单的循环,如果不再SQL逻辑中增加退出循环的条件,可以用来实现简单的死循环。LOOP可以配合以下两个语句使用:
- LEAVE: 配合循环使用,退出循环。
- ITERATE :必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环。
语法:
👆:LOOP用法示例,其中leave 相当于java中的break ,iterate 相当于java中的continue。
游标
游标(CURSOR)是用来存储查询结果集的数据类型,再存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明,OPEN,FETCH和CLOSE,其语法分别如下。
条件处理程序
条件处理程序(Handler)可以用来定义在里路程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为:
👆:游标与 while 与条件处理程序的应用示例。使用游标stu_cur将满足条件的stu中的name ,score记录,再使用while循环通过fetch将游标的记录取出。当游标遍历完毕,fetch取不到数据,报错'02000' NOT FOUND,声明的条件处理程序将存储过程退出并关闭游标stu_cur。
以上内容均学自B站黑马MySQL视频