MySQL自定义函数是用户编写的、用于扩展原生能力的确定性SQL逻辑,需用DELIMITER修改分隔符,CREATE FUNCTION定义,含参数、返回类型及BEGIN…END函数体,调用如内置函数。
MySQL 中的函数,是一段被封装好的、可重复调用的 SQL 逻辑,它的核心作用是**接收输入、执行计算或处理、返回一个确定值**。自定义函数(User-Defined Function, UDF)就是由用户自己编写、注册到数据库中的函数,用于扩展 MySQL 原生能力,比如拼接带格式的名称、生成动态表名、做业务规则判断等。
一个合法的 MySQL 自定义函数必须包含以下要素:
;,需先用 DELIMITER $$ 临时改结束符,避免提前触发执行;函数定义完再用 DELIMITER ; 恢复。RETURNS 返回类型(注意不是 RETURN)。DECLARE)、赋值(SET 或 SELECT ... INTO)、流程控制(IF/CASE),最后必须有 RETURN 表达式。不是所有环境默认允许创建函数,需确认并开启权限:
SHOW VA
RIABLES 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 处理空值。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;