MySQL基础——存储过程和函数

MySQL基础——存储过程和函数

MySQL存储过程和函数:类似于Python中的方法

一、存储过程

含义:
一组预先编译好的sql语句的集合,理解成批量处理语句

优点:

1.	提高代码的重用性
2.	简化操作
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
1. 创建语法
Create procedure 存储过程名(参数列表)
Begin
	存储过程体(一组合法的sql语句)
End

注意:

  1. 参数列表包含三部分

    	参数模式、参数名、参数类型
    	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)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值