MySQL基础——存储过程和函数
文章目录
MySQL存储过程和函数:类似于Python中的方法
一、存储过程
含义:
一组预先编译好的sql语句的集合,理解成批量处理语句
优点:
1. 提高代码的重用性
2. 简化操作
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
1. 创建语法
Create procedure 存储过程名(参数列表)
Begin
存储过程体(一组合法的sql语句)
End
注意:
-
参数列表包含三部分
参数模式、参数名、参数类型 Eg: in stuname varchar(20)
参数模式:
In :该参数可以作为输入,也就是该参数需要调用方传入值
Out :该参数可以作为输出,也就是该参数可以作为返回值
Inout :该参数既可以作为输入又可以作为输出,也就是该 参数既需要传入值,又可以返回值
如果存储过程体仅仅只有一句话,begin end 可以省略
存储过程体中的每条sql语句的结尾要求必须加分号
存储过程的结尾可以使用delimiter重新设置
语法:
Delimiter 结束标记
Delimiter $
2. 调用语法
Call 存储过程名(实参列表);
1)空参列表
#案例:插入到admin表中五条记录
Select * from admin;
Delimiter $
Create procedure mypl()
Begin
Insert into admin(username,’password’)
Value(‘john1’,’0000’),(‘lily’,’0000’),(‘rose’,’0000’),(‘jack’,’0000’),(‘tom’,’0000’);
End $
Call mypl() $
2)创建带in模式参数的存储过程
#案例1:创建存储过程实现,根据女神名,查询对应的男神信息
Create procedure myp2(in beautyname varchar(20))
Begin
Select bo.*
From boys bo
Right join beauty b on bo.id = b.boyfriend_id
Where b.name = beautyname;
End $
Call myp2(‘柳岩’) $
#案例2:创建存储过程实现,用户是否登录成功
Create procedure myp4(in username varchar(20),in password varchar(20))
Begin
Declare result int default 0; #声明并初始化
Select count(*) into result #赋值
From admin
Where admin.username = username
And admin.password = password;
Select if(result>0,’成功’,’失败’); #使用
End $
Call myp3(‘张飞’,’8888’)$
3)创建带out模式的存储过程
#案例1:根据女神名,返回对应的男神名
Create procedure myp5(in beautyname varchar(20),out boyname varchar(20))
Begin
Select bo.boyname into boyname
From boys bo
Inner join beauty b on bo.id = b.boyfriend_id
Where b.name = beautyname;
End $
#调用
Call myp5(‘小昭’,@bname) $
Select @bname$
#案例2:根据女神名,返回对应的男神名和男神魅力值
Create procedure myp6(in beautyname varchar(20),out boyname varchar(20),out userCP int)
Begin
Select bo.boyname ,bo.userCP into boyname ,userCP
From boys bo
Inner join beauty b on bo.id = b.boyfriend_id
Where b.name = beautyname;
End $
Call myp6(‘小昭’,@bname,@userCP)
4) 创建带inout模式参数的存储过程
案例1:传入a和b两个值,最终a和b都翻倍并返回
Create procedure myp8(inout a int ,inout b int)
Begin
Set a = a*2;
Set b = b*2;
End $
#调用
Set @m = 10$
Set @n = 20$
Call myp8(@m,@n)$
Select @m,@n$
3. 删除存储过程
语法:drop procedure 存储过程名
注意:
删除存储过程,只能一个一个删,不能一次删除多个
4. 查看存储过程的信息
Show create procedure 存储过程名;
二、函数
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
优点:
1. 提高代码的重用性
2. 简化操作
3. 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
区别:
存储过程:可以有0个返回值,也可以有多个返回值,适合做批量插入、批量更新
函数:有且仅有1个返回值,适合做处理数据后返回一个结果
1. 创建语法
Create function 函数名(参数列表) returns 返回类型
Begin
函数体
End
注意:
1. 参数列表包含两部分:参数名 参数类型
2. 函数体:肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不报错,但不建议
Return 值;
3. 函数体中仅有一句话,则可以省略begin end
4. 使用delimiter语句设置结束标记
Delimiter $
2. 调用语法
Select 函数名(参数列表) #执行完函数体语句,然会显示返回值
3. 案例演示
1)无参数有返回
#案例:返回公司的员工个数
Create function myf1() returns int
Begin
Declare c int default 0; #定义变量
Select count(*) into c #赋值
From employees;
Returns c;
End $
Select myf1() $
2)有参有返回
#案例1:根据员工名,返回它的工资
Create function myf2(empname varchar(20) ) returns double
Begin
Set @sal = 0; #定义用户变量
Select salary
From employees
Where last_name = empname;
Return @sal;
End $
Select myf2(‘kochhar’)$
3. 查看函数
Show create function 函数名;
4. 删除函数
Drop function 函数名;
记个学习笔记还能相似度高,行吧。加个相似的连接:[相似文章](https://blog.csdn.net/soulmate______/article/details/108561112)