函数
含义:
一组预先编译好的sql语句的集合,理解成批处理语句
好处:
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
函数和储存过程的区别:
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数:有且仅有1个返回,适合做处理批量数据后返回一个结果
一、创建语法
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
注意:
1. 函数名(参数列表)包含两部分:参数名 参数类型
2. 函数体:肯定会有return语句,如果没有会报错。写法:return 值;
如果return语句没有放在函数体的最后也不报错,但不建议。
3.函数体中仅有一句话,则可以省略begin end
4.使用delimiter语句设置结束标记
二、调用语法
select 函数名(参数列表)
-------------------------------------------------案例演示:----------------------------------------------------
1.无参有返回
案例:返回boys表的数据量
delimiter $ #设置结束标记
#创建函数myfun1,返回一个INT类型的结果,必须是returns 参数类型
#如果客户端工具不能成功创建函数,需要去原始mysql的命令行执行
CREATE FUNCTION myfun1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#定义变量c,声明变量
SELECT COUNT(1) INTO c#为变量c赋值
FROM beauty;
RETURN c;#必须要有return语句,返回变量值
END $
#调用函数
select myfun1();
结果:
2.有参有返回
案例1:根据女生的姓名,返回男朋友的名字
#创建函数,返回一个RETURNS varchar(20)类型的值
CREATE FUNCTION myfun2 (girlname varchar(20)) RETURNS varchar(20)
BEGIN
DECLARE m VARCHAR(20) DEFAULT NULL;#声明变量m
select b.boyName into m #将查询的值,赋予变量m
FROM beauty g JOIN boys b
ON g.boyfrind_id=b.id
WHERE g.`name`=girlname;#g.`name`等于输入的变量girlname
return m;#将值返回给自定义的变量m
END $
select myfun2('小昭')
结果:
经典案例3:
创建函数,实现传入两个float,返回二者之和
#如果客户端工具不能成功创建函数,需要去原始mysql的命令行执行
CREATE FUNCTION myfun3(a float,b float) returns float
BEGIN
DECLARE c FLOAT DEFAULT 0;#声明变量c,用来存放二者之和
set c=a+b;#设置变量c,等于变量a+变量b
RETURN c;
END $
select myfun3(2,6)#求2,6的和,小数也可以求
结果:
三、查看函数
SHOW CREATE FUNCTION 函数名
四、删除函数
DROP FUNCTION 函数名