MySQL的存储过程

存储过程:是一组为了完成特定功能的sql语句的集合,类似于函数

写好一个存储过程之后,我们可以像函数一样随时可以调用sql的集合

复杂的,需要很多sql语句联合执行完成的任务

存储过程在执行上比sql语句执行速度快,效率也更高

创建存储过程

delimiter $$

将语句的结束符号从分号临时改变成两个$$

create procedure proc ()

创建存储过程。proc:存储过程的名字,在当前库中唯一。()中不定义任何方法

begin

过程体开始的关键字

select * from info;

begin后面跟上的是需要执行的sql语句

end $$

整个语句结束,和上面的定义看i是符号$$一一对应

delimiter;

将结束语句的分号恢复

delimiter的作用:保证整个存储过程中的sql语句能够被完整的执行

注释:

# :井号键

-- :--加空格

show procedure status where db='fmh';

show procedure status like '%proc%';

call proc;

drop PROCEDURE if EXISTS proc;

存储过程中,参数有三种运用的方式:

1、in 输入参数

调用者向存储过程传入值

delimiter $$

create PROCEDURE test1 (in uname char(20) )

BEGIN

select * from info where name = uname;

select * from info;

update info set name = '吴少' where name=uname;

end $$

delimiter;

call test1('吴少');

2、out 输出参数

表示存储过程向调用者传出值(可以返回多个值)

delimiter $$

create PROCEDURE test2 (out num int)

BEGIN

set num = 100;

end $$

delimiter;

call test2(@num);

insert into info values(2,'少爷',@num,'是');

3、inout

表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作之后,返回给调用者

delimiter $$

create PROCEDURE test3 (INOUT str varchar(10))

BEGIN

select str;

-- 显示输入的字符

set str = concat(str,'_abc');

-- 让传入的字符串做一个拼接

select str;

-- 加工之后的字符串

end $$

delimiter;

set @str='千金';

call test3(@str)

UPDATE info set name=@str where id = 1;

过程:

in:先传入,定义变量的值,初始值

call test3 调用存储过程,把变量的值传入存储过程

@str=千金_abc

存储过程中的控制语句

delimiter $$

create PROCEDURE test5 (inout num int)

BEGIN

if num >= 10 THEN

set num=num-6;

ELSE

set num=num*2;

end if;

-- 结束if语句的判断

set num = num;

end $$

delimiter;

set @num=5;

call test5(@num)

update info set id = @num where score = 100;

调用多个参数: 范围的方式匹配,完成传参-----写入表中

delimiter $$

create PROCEDURE test7(inout score int,out grade varchar(15))

BEGIN

if score between 85 and 100 then

set grade = '优秀';

ELSEIF score between 60 and 84 then

SET grade = '一般';

ELSE

set grade = '不及格';

end if;

select grade;

end $$

delimiter;

set @score=95;

call test7(@score,@grade);

update info set score=@score,pass=@grade where id = 10;

while循环语句:

delimiter $$

create PROCEDURE test8 (out result int)

BEGIN

DECLARE a INT;

DECLARE i INT;

set a=10;

set i=1;

while i<=10 do

set a=a+10;

set i=i+1;

-- 相当于i++

end while;

set result =a;

end $$

delimiter;

set @result=110;

call test8(@result)

select @result

注意:

1、使用存储过程中,在内部变量不需要加@,外部使用和赋值要加@,引用变量

2、在存储过程begin之后声明变量:declare a INT; declare i INT; 声明变量要加数据类型

3、要想使用存储过程里面的结果,必须要out才能传出参数。在声明存储变量是,要定义好参数的传参方式(in out INOUT)

相关推荐
小帅学编程25 分钟前
JDBC学习
数据库·学习·oracle
姓蔡小朋友36 分钟前
MySQL事务、InnoDB存储引擎
java·数据库·mysql
初恋叫萱萱41 分钟前
【TextIn大模型加速器 + 火山引擎】文件智能体构建全路径指南
大数据·数据库·火山引擎
拾荒的小海螺44 分钟前
MySQL:死锁问题分析与解决方案
数据库·mysql
玩转数据库管理工具FOR DBLENS1 小时前
关系型数据库与非关系型数据库:差异、介绍与市场格局
数据库·oracle·nosql
我科绝伦(Huanhuan Zhou)1 小时前
影响SQL Server性能的关键因素深度解析
数据库·sql server
Lion Long1 小时前
大数据时代的“时间”难题:时序数据库(TSDB)选型避坑指南
大数据·数据库·时序数据库·数据库架构·iotdb·tsdb
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
云老大TG:@yunlaoda3602 小时前
华为云国际站代理商NAT的高可用与弹性具体是如何实现的?
服务器·数据库·华为云·负载均衡
虹科网络安全2 小时前
艾体宝产品 | 隆重推出 Haink:Redis 的应用型 AI 智能体
数据库·人工智能·redis