一、存储过程
定义:一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
优点:
1.简化重复调用
2.批量处理
3.统一接口,保证数据安全
1、创建和调用
详情可见:https://www.cnblogs.com/geaozhang/p/6797357.html
一、创建与调用
1.创建
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; #将语句的结束符号恢复为分号
2.调用 CALL ...
call delete_matches(57);
3.存储过程体
BEGIN BEGIN BEGIN statements; END END END
4.为语句块贴标签————增强代码可读性
label1: BEGIN label2: BEGIN label3: BEGIN statements; END label3 ; END label2; END label1
二、存储过程的参数
0或多个参数
注意点:
- 如果没有参数,也需要写()
- 参数名字不要等于列的名字
建议:
- 输入使用in
- 返回使用out
- inout尽量少用
2、变量定义
详情可见:https://www.cnblogs.com/geaozhang/p/6803423.html
一、局部变量
1.语法:
- 默认NULL
- 可默认字面量
begin declare var1 int default 100; end
- 可默认标量子查询
begin declare var2 int default(select count(*) from XXX); end
2.作用域
- 在外部块中声明的变量可以在内部块中直接使用;
- 在内部块中声明的变量只能在内部块中使用。
二、用户变量
- 连接断开则消失
- 不可跨连接使用
表示:@
定义:
- set: set @var1:=999;
- select: select @var2:=199;
三、系统变量
表示:@@
1)全局变量
- 修改方式:配置文件(my.ini、my.cnf)
- 作用域:整个服务器
2)会话变量
- 修改方式:set @@global_XXX:=123;
- 作用域:仅限当前会话
3、流程控制
https://www.cnblogs.com/geaozhang/p/6808867.html
二、函数
定义:函数存储着一系列sql语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复
注意点:自定义函数不能跨库使用
1.创建
mysql> DELIMITER // mysql> CREATE FUNCTION Ver_Compare (n INT, m INT) -> RETURNS VARCHAR(50) #声明返回的数据类型 -> BEGIN -> DECLARE s VARCHAR(50); -> IF n = m THEN SET s = 'equals'; -> ELSE -> IF n > m THEN SET s = 'greater'; -> ELSE SET s = 'less'; -> END IF; -> SET s = CONCAT('is ', s, ' than'); -> END IF; -> SET s = CONCAT(n, ' ', s, ' ', m, '.'); -> RETURN s; #一个实际的返回值 -> END // mysql> DELIMITER ;
2.调用
调用函数需要有变量接收其结果
set @ax = Ver_Compare(1,2); select @ax;
3.其他
查看所有自定义函数: show function statusG;
删除指定自定义函数: drop function func_name;