Mysql 系列 | procedure(存储过程)
存储过程是实现特定功能的语句集合,编译后存在数据库中。
通过存储过程的名字,并给定参数来调用。
创建
create procedure 过程名([IN|OUT|INOUT 参数名 数据类型])
begin
--- ;
end;
-
通常在创建之前先进行删除操作,
drop procedure if exists 过程名;
-
为了避免和 SQL 语句的结束符
;
冲突,创建前先申明存储过程要用的分隔符,delimiter 新分隔符
-
存储过程结束后还原分隔符,
delimiter ;
-
参数的格式是,
IN|OUT|INOUT 参数名 数据类型
IN
,输入参数,修改参数的值不能被返回OUT
,输出参数,可被更改并返回INOUT
,输入输出参数,可被更改并返回
-
结构体在
begin
和end
中间,可以定义变量写逻辑等
结构体
变量
-
定义
declare
-
declare i int default 0;
-
declare v varchar(255);
-
declare d date default '2022-08-17';
-
-
赋值,可以是一个固定的值,也可以从数据表中查出并赋值
-
set i = 9;
-
set v = 'hello'
-
select name into v from users where id = 1
,从 users 表中取得 name 赋值给 v
-
条件判断
-
if 条件1 then 语句1; elseif 条件2 语句2; else 语句3; end if;
-
case 判断条件 when 条件1 then 结果1; when 条件2 then 结果2; else 结果3; end case;
循环
-
while (条件) do 语句; end while;
-
repeat 语句; until 条件; end repeat;
-
loop_name: loop if 条件1 then leave loop_name; /* 相当于 break */ end if; if 条件2 then iterate loop_name; /* 相当于 continue */ end if; 语句; end loop loop_name;
调用
/* 如果有,先删除 */
drop procedure if exists p1;
/* 定义存储过程边界符 */
delimiter ;;
/* 创建存储过程 */
create procedure p1(in i1 int, in i2 int, out r int)
begin
结构体;
end;;
/* 还原边界符 */
delimiter ;
/* 调用 */
call p1(1, 2, @re);
select @re;
查看
-
/* 查看存储过程 */ SHOW PROCEDURE STATUS WHERE db=’数据库名’;
-
/* 查看存储过程定义内容 */ SHOW CREATE PROCEDURE 数据库.存储过程名;
修改
ALTER PROCEDURE 存储名
CONTAINS SQL /* 包含SQL语句,但不包含读或写数据的语句 */
NO SQL /* 不包含SQL语句 */
READS SQL /* 包含读数据的语句 */
MODIFIES SQL DATA /* 含写数据的语句 */
SQL SECURITY INVOKER /* 指明谁有权限执行,DEFINER(定义者可执行)、INVOKER(调用者可执行) */
COMMENT '注释内容' ; /* 添加注释 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了