创建函数
create function 函数名(参数列表) returns 返回类型
begin
函数体
end
- 参数列表:
参数名
参数类型
- 函数体最后要有
return 值;
语句,没有的话,会报错 - 函数体中只有一句话时,可以省略
begin
end
语句 - 可以使用
delimiter 结束标记
语句设置函数结束标记
- 函数内部可以定义用户变量 & 局部变量
调用
MySQL8 需要设置一下操作,才能运行函数:
show variables like 'log_bin_trust_function_creators';
set global log_bin_trust_function_creators = 1;
show variables like 'log_bin_trust_function_creators';
执行函数里面的语句,并返回
select 函数名(参数列表);
无参数
eg:返回借阅者人数
drop function if exists myf1;
delimiter $
create function myf1() returns int
begin
declare sum int default 0; -- 定义局部变量
select count(*) into sum -- 给局部变量赋值
from reader;
return sum; -- 返回局部变量
end$
select myf1(); -- 输出函数结果
有参数
eg:根据员工名,返回工资
drop function if exists myf1;
delimiter $
create function myf1(person varchar(20)) returns double
begin
set @sal = 0; -- 定义用户变量
select count(*) into @sal -- 给用户变量赋值
from reader r
inner join borrow b
on r.readerNo = b.readerNo
where readerName = person;
return @sal; -- 返回用户变量
end $
select myf1('张良'); -- 输出函数结果
查看
show create function 函数名;
删除
drop function 函数名;
函数 & 存储过程
- 存储过程:0 ~ n 个返回值 → 适合做批量插入,批量更新
- 函数:有且仅有 1 个返回值 → 适合处理数据后返回一个结果