16 MySQL 自定义函数:创建、调用和删除

本文详细介绍了MySQL中自定义函数的创建、调用和删除。在创建函数时,需要指定函数名、参数、返回类型、存储函数的特性以及函数体。示例包括ym_date()、ym_date2()和show_name_store()函数。调用自定义函数时,直接在SQL语句中使用函数名及参数。删除函数的语法也简单明了,但需要注意预删除函数可能存在的警告或错误。遇到创建函数报错的问题,可能是因为MySQL的安全性设置,调整用户权限后即可解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、自定义函数:SQL创建语法

create function funcName([funcParameter])
returns type
[characteristics...] routine_body

funcName 函数名
funcParameter 可选多个参数
returns type 返回type数据类型
characteristics 指定存储函数的特性,取值举例:
sql security {definer | invoker}:指明谁有执行权限;
invoker 拥有权限的调用者; definer 定义者(默认值);
comment ‘string’ 注释信息,可以用来描述存储函数
routine_body 函数体:
函数体由SQL代码构成,如,简单SQL查询语句;或复合结构SQL语句;
函数体若是复合结构(多行代码)时,必须使用 begin...end 语句;
复合结构可以包含声明、流程控制; 需结合使用 delimiter 转换(;)结束标识符

示例A:从图书信息表[bookinfo]查询图书发布时间[pubadate]:

select date_format(pubadate,'%Y-%m') from bookinfo;

1、封装为 ym_date() 函数:

create function ym_date(mydate date)
returns varchar(15)
return date_format(pubadate,'%Y-%m');

2、复合结构: 封装为 ym_date2() 函数:必须加入begin...end

delimiter //
	create function ym_date2(mydate date)
	returns varchar(15)
	begin
		return date_format(pubadate,'%Y-%m');
	end //
delimiter ;

示例B:创建 newdate() 无参函数
返回系统日期,格式: xxxx年xx月xx日

create function newdate()
returns varchar(20)
return date_format(curdate(),'%Y年%m月%d日');

示例C:创建 show_name_store(bid int)有参函数:
根据图书ID 返回书名/库存信息,字符串格式’书名----库存’

create function show_name_store(bid int)
returns varchar(50)
return (select concat_ws('----',book_name,store) from bookinfo where book_id=bid);

二、自定义函数:调用

select ym_date(pubadate) from bookinfo;	/*调用函数 ym_date */
select ym_date2(pubadate) from bookinfo;/*调用函数 ym_date2 */
select newdate();						/*调用 newdate 无参函数 */
select show_name_store(20150201);		/*调用 show_name_store 有参函数 */

三、自定义函数:SQL删除语法

drop function [if exists] funcName;

funcName 函数名
② 预删函数不存在时, 有if exists只会警告; 无if exists会报错;
示例: 删除 newdate 函数

drop function newdate;
drop function if exists newdate; /* 当newdate不存在时,有 if exists 不会报错 */

注意:创建自定义函数报错问题:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, 
or READS SQL DATA in its declaration and binary logging is enabled 
(you *might* want to use the less safe log_bin_trust_function_creators variable)

mysql 默认不允许创建自定义函数(安全性的考虑) 所以只要设置信息用户的操作即可

mysql> set global log_bin_trust_function_creators=TRUE;
Query OK, 0 rows affected (0.00 sec)

然后就可以正常 创建自定义函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值