什么是函数_mysql自定义函数说明

来源:这里教程网 时间:2026-02-28 20:34:28 作者:

MySQL 中的函数,是一段被封装好的、可重复调用的 SQL 逻辑,它的核心作用是**接收输入、执行计算或处理、返回一个确定值**。自定义函数(User-Defined Function, UDF)就是由用户自己编写、注册到数据库中的函数,用于扩展 MySQL 原生能力,比如拼接带格式的名称、生成动态表名、做业务规则判断等。

自定义函数的基本结构

一个合法的 MySQL 自定义函数必须包含以下要素:

DELIMITER 修改分隔符:因函数体中含多个
;
,需先用
DELIMITER $$
临时改结束符,避免提前触发执行;函数定义完再用
DELIMITER ;
恢复。
CREATE FUNCTION 语句:指定函数名、参数列表(形参+类型)、
RETURNS
返回类型(注意不是
RETURN
)。
BEGIN … END 函数体:中间可声明变量(
DECLARE
)、赋值(
SET
SELECT ... INTO
)、流程控制(
IF
/
CASE
),最后必须有
RETURN 表达式

创建前的关键准备

不是所有环境默认允许创建函数,需确认并开启权限:

检查是否启用:
SHOW VARIABLES LIKE '%func%';
,重点看
log_bin_trust_function_creators
是否为
ON
(值为
1
)。
若未开启,需执行:
SET GLOBAL log_bin_trust_function_creators = 1;
(需 SUPER 权限)。
函数不能包含非确定性操作(如
NOW()
RAND()
),除非显式声明
DETERMINISTIC
或对应特性(如
READS SQL DATA
)。

常见使用场景与写法要点

自定义函数适合轻量、单值、可预测的逻辑封装,例如:

字符串组合:如
CONCAT(name, '(', code, ')')
,配合
IFNULL
TRIM
处理空值。
数值转换或校验:如将分数转等级(90→'A')、身份证号校验位计算。 日期格式化封装:用
DATE_FORMAT(NOW(), '%Y年%m月%d日')
封装成易读中文日期。
注意限制:不能执行
INSERT
/
UPDATE
/
DELETE
,不能返回结果集,也不能动态执行 SQL(这点和存储过程不同)。

调用与管理方式

函数一旦创建成功,就可像内置函数一样直接在 SQL 中使用:

SELECT
中:
SELECT addMaterialName('钢板', 'Q235B');
WHERE
ORDER BY
中:
WHERE getAge(birth_date) > 18
查看已创建函数:
SHOW FUNCTION STATUS;
或查询
information_schema.ROUTINES
删除函数:
DROP FUNCTION IF EXISTS function_name;

相关推荐