mysql 存储过程
存储过程procedure是实现特定功能的语句集合,编译后存在数据库中。
通过存储过程的名字,并给定参数来调用。
procedure
delimiter
declare
创建
1 2 3 4 5 6 7 | drop procedure if exists p1; --如果过程存在,删除。 delimiter $$ -- 定义存储过程边界符 create procesure p1( in a1 varchat(50), in a2 int , out b1 int ) begin end $$ -- 执行 delimiter; -- 还原边界符 |
- 通常在创建之前先删除过程。drop procedure if exists 过程名
- 使用delimiter定义标识符。delimiter $$
- 存储过程结束后还原标识符。delimiter ;
- 参数 IN|OUT|INOUT参数名称 数据类型
IN
,输入参数,修改参数的值不能被返回OUT
,输出参数,可被更改并返回INOUT
,输入输出参数,可被更改并返回
- 结构体在BEGIN和END之间。可以定义变量和逻辑。
结构体
变量
- 定义 declare
- declare i int default 0;
- declare s varchar(50) default '';
- declare x,y int;
- 赋值 可以是固定值,或者数据表查询后赋值。
- set i=9;
- set str='hello';
- select salary into i from person where name='张三';
循环
-
123
while 条件 do
……
end
while;
/* 循环插入数据 */ CREATE TABLE IF NOT EXISTS student(id int ,sname VARCHAR(20)); drop procedure if exists p1; delimiter $$ CREATE procedure p1(in i int) #!!这里不能加分号 BEGIN declare x int; set x=1; WHILE x<i+1 do INSERT INTO student VALUES(x,'测试'); set x=x+1; end WHILE; END $$ delimiter; call p1(12); SELECT * from student;
-
1234567891011
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;
-
1234
repeat
语句;
until 条件;
end
repeat;
条件
-
123
if (a<5)
then
……
end
if;
-
1234567
if(a>10)
then
……
elseif (a>5)
then
……
else
……
end
if;
- 输入两个数字,比较大小并输出结果。
drop procedure if exists t1; delimiter $$ CREATE procedure t1(in a1 int,in a2 int,out a3 VARCHAR(20)) BEGIN if a1>a2 then set a3='A1大'; ELSEIF a1<a2 then set a3='A2大'; ELSE SET a3='一样大'; end if; END $$ delimiter; call t1(22,22,@S); SELECT @s
-
12345
case
判断条件
when
条件1
then
结果1;
when
条件2
then
结果2;
else
结果3;
end
case
;
- 输入成绩,判断是否及格。
drop procedure if exists t2; delimiter $$ CREATE procedure t2(in score DOUBLE,out x VARCHAR(20)) BEGIN case when score >80 then set x='优秀'; when score >60 then set x='及格'; ELSE set x='不及格'; end case; END $$ delimiter; call t2(60.22,@S); SELECT @s
-
判断星期几
drop procedure if exists t3; delimiter $$ CREATE procedure t3(in d int,out x VARCHAR(20)) BEGIN case d when 1 then set x='星期一'; when 2 then set x='星期二'; when 3 then set x='星期三'; when 4 then set x='星期四'; ELSE set x='不知道'; end case; END $$ delimiter; call t3(2,@S); SELECT @s
其他
1 2 3 4 5 | 查看[指定数据库]已创建的存储过程: show PROCEDURE STATUS WHERE db= 'db_test' /* 查看存储过程定义内容 */ SHOW CREATE PROCEDURE 数据库.存储过程名; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!