MySQL教程 - 存储过程与自定义函数(Produce & Function)
2022/9/6 2:25:08
本文主要是介绍MySQL教程 - 存储过程与自定义函数(Produce & Function),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
更新记录
转载请注明出处。
2022年9月4日 发布。
2022年9月4日 从笔记迁移到博客。
存储过程与函数
说明
存储过程和函数是一条或多条SQL语句的集合
存储过程的返回值通过输出参数实现,函数可以直接返回标量
存储过程和自定义函数区别
相同点:
都是自定义逻辑的SQL集合
不同点:
存储过程没有返回值,但是可以有多个OUT参数
函数只有一个返回值,只有IN参数,没有OUT参数
存储过程和函数作用
实现复杂的SQL逻辑
减少传输量,SQL存储在服务器端
提高查询速度
设置结束符
DELIMITER 结束符
创建存储过程
CREATE PROCEDURE 存储过程名([IN | OUT | INOUT] 参数名 参数类型.....) [特性] BEGIN END
特性可取值:
LANGUAGE SQL
指明使用的是SQL语言 [默认值]
[NOT] DETERMINISTIC
表示结果是否确定
DETERMINISTIC表示确定,每次输入相同就会输出相同
NOT DETEMINISTIC 表示不确定,每次输出可能不同 [默认值]
[NOT SQL | READS SQL DATA | MODIFIES SQL DATA | CONTAINT SQL]
表示包含的语句的限制
NOT SQL 表示没有包含的语句中没有SQL
READS SQL DATA 表示包含的语句有读取的SQL
MODIFIES SQL DATA 表示包含的语句有写入、修改的SQL
CONTAINT SQL 表示包含SQL,并且包含读取、写入的SQL。[默认值]
COMMENT '注释' 注释信息
SQL SECURITY [DEFINER | INVOKER]
表示谁有权限执行
DEFINER 表示定义者可以执行[默认值]
INVOKER 表示调用者可以执行
注意:特性是可选的
调用存储过程
CALL 存储过程名(参数);
备注:
参数不需要带IN/OUT
修改存储过程
ALTER PROCEDURE存储过程名 (参数) [特性] BEGIN END
查看存储过程和函数
SHOW CREATE [PROCEDURE | FUNCTION ] 存储过程名;
或者
SHOW [PROCEDURE | FUNCTION ] STATUS [LIKE '存储过程名'];
或者
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME = '存储过程名';
删除存储过程和函数
DROP [PROCEDURE | FUNCTION ] [IF EXISTS] 存储过程名;
创建函数
CREATE FUNCTION 函数名([IN | OUT | INOUT] 参数名 参数类型.....) RETURNS 返回类型 [特性] BEGIN RETURN 值; END
调用函数
函数名(参数);
修改函数
ALTER FUNCTION 函数名(参数) RETURNS 返回类型 [特性] BEGIN END
参数格式
[IN | OUT| INOUT] 参数名 数据类型
比如
IN arg1 INT, OUT arg2 DATE
变量定义与赋值
声明1
DECLARE 变量名,变量名,... 数据类型 [DEFAULT 默认值];
赋值1
SET 变量名 = 值;
赋值2-多个变量赋值
注意:可以直接在存储过程之外进行声明和赋值变量
SELECT 列名, 列名 INTO @变量名, @变量名... FROM 表名;
或者
SELECT 列名, 列名 INTO 变量名,变量名,... FROM 表名;
临时变量
注意:可以直接在存储过程之外进行声明和赋值变量
定义语法:
SET @变量名 := 值;
赋值语法:
SET @变量名 := 值;
备注:
必须带@符号,不论是定义还是使用,初始化必须赋值
定义和赋值是一样的语法
游标定义与使用
定义游标
DECLARE 游标名 CURSOR FOR
选择语句;
打开游标
OPEN 游标名;
使用游标
FETCH 游标名 INTO 变量名,变量名,....
关闭游标
CLOSE 游标名;
条件与循环语句
IF
IF 条件 THEN 执行语句 END IF
IF-ELSE
IF 条件 THEN 执行语句 [ELSE IF 条件 THEN 执行语句] [ELSE 执行语句] END IF
CASE 1
CASE 表达式 WHEN 值 THEN 执行语句 WHEN 值 THEN 执行语句 ... [ELSE 执行语句] END CASE
CASE 2
CASE WHEN 条件 THEN 执行语句 WHEN 条件 THEN 执行语句 ... [ELSE 执行语句] END CASE
LOOP
[label]: LOOP 语句 LEAVE label; END LOOP [label]
LEAVE
LEAVE label; //类似break;用于退出循环和选择 ITERATE ITERATE label; //类似continue;用于退出循环和选择
WHILE
[label] WHILE 条件 DO 执行语句 END WHILE [label]
REPEAT
[label]: REPEAT 语句 UNTIL 条件 END REPEAT [label]
定义错误捕获
语法:
DECLARE 错误名 CONDITION FOR 错误类型;
错误类型可取值:
错误码
SQLSTATE'状态码';
备注:
CONDITION FOR 后面的错误码和状态码任选一个即可,注意状态码要加上SQLSTATE
定义错误处理
语法:
DECLARE 处理方式 HANDLER FOR 错误的类型 执行的SQL语句;
处理方式可取值:
CONTINUE 继续执行 EXIT 立即停止执行
错误的类型可取值:
自定义的错误名
```sql SQLSTATE '状态码' ```
错误码
SQL WARNING (01开头的全部状态码) NOT FIND (02开头的全部状态码) SQLEXCEPTION (没有被捕获的状态码)
这篇关于MySQL教程 - 存储过程与自定义函数(Produce & Function)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南