MySQL 5.0 版本开始支持存储过程。
存储过程:用户定义的一系列SQL语句的集合。
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
存储过程定义的一个实例:
创建存储过程,使用如下的语法:
DELIMITER $
CREATE PROCEDURE [存储过程名] (存储过程所需的参数)
BEGIN
——SQL语句
END$
示例:
调用存储过程的语法如下:
call procedure_name();
示例:
返回的结果为:
——查看数据库 “db_name” 中所有的存储过程
SELECT NAME FROM mysql.proc WHERE db = "db_name";
——查看存储过程的状态信息
SHOW PROCEDURE STATUS ;
——查询某个存储过程的定义
SHOW CREATE PROCEDURE db_name.proc_name ;
DROP PROCEDURE IF EXISTS procedure_name;
存储过程是可以进行编程的,可以编程意味着可以使用变量、表达式、控制结构,来完成比较复杂的功能。
5.1 变量
DECLARE在存储过程中,使用DECLARE关键字声明局部变量,该变量的作用范围是BEGIN ... END块中。
示例:
调用如下:
SET直接赋值使用SET,可以赋值常量或者表达式。
示例:
调用如下:
5.2 if条件判断
语法格式如下:
IF condition_list THEN statement_list;
[ELSEIF condition_list THEN statement_list]
[ELSE]
END IF;
示例:
调用如下:
5.3 传递参数
IN ——输入参数(调用存储过程的时候输入,默认)示例:
调用如下:
OUT——输出参数(调用存储过程的时候输出)示例:
调用如下:
在MySQL中,变量名称之前添加@,表示该变量为用户会话变量,只在此次会话过程中有效;
变量名称之前如果有@@,表示该变量为系统变量,例如@@global.sort_buffer_size。
5.4 CASE结构
示例:
调用如下:
5.5 循环结构
while循环调用如下:
REPEAT循环(满足条件则退出循环,否则一直循环)注意:while循环结构中,满足条件才会执行循环;
而在repeat循环结构中,满足条件会退出循环。
repeat的结构如下:
REPEAT
statement_list
UNTIL 【退出条件】 END REPEAT;
示例:
调用如下:
LOOP循环结构,需要配合LEAVE语句一起使用LOOP
statement_list(这里需要实现leave语句,否则会死循环)
END LOOP;
示例:
调用如下:
5.6 游标/光标
游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对查询结果集进行遍历。游标的使用包括:游标的声明、OPEN、FETCH和CLOSE,语法分别如下:
声明游标DECLARE cursor_name CURSOR FOR select_statement ;
OPEN游标OPEN cursor_name ;
FETCH游标FETCH cursor_name INTO var_name ...
CLOSE游标CLOSE cursor_name ;
存储函数可以认为是一个有返回值的存储过程。
示例:
调用如下:
1、https://hillzhang1999.gitee.io/2020/05/29/shu-ju-ku-fu-xi-ji-yu-mysql/#toc-heading-118
2、https://www.bilibili.com/video/BV1UQ4y1P7Xr?p=27