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

15次阅读

MySQL 自定义函数是用户编写的、用于扩展原生能力的确定性 SQL 逻辑,需用 DELIMITER 修改分隔符,CREATE FUNCTION 定义,含参数、返回类型及 BEGIN……END 函数体,调用如内置函数。

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

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

自定义函数的基本结构

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

  • DELIMITER 修改分隔符 :因函数体中含多个 ;,需先用 DELIMITER $$ 临时改结束符,避免提前触发执行;函数定义完再用 DELIMITER ; 恢复。
  • CREATE FUNCTION 语句 :指定函数名、参数列表(形参 + 类型)、RETURNS 返回类型(注意不是 RETURN)。
  • BEGIN …… END 函数体 :中间可声明变量(DECLARE)、赋值(SETSELECT …… 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, ')'),配合 IFNULLTRIM 处理空值。
  • 数值转换或校验 :如将分数转等级(90→’A’)、身份证号校验位计算。
  • 日期格式化封装 :用 DATE_FORMAT(NOW(), '%Y 年 %m 月 %d 日') 封装成易读中文日期。
  • 注意限制 :不能执行 INSERT/UPDATE/DELETE,不能返回结果集,也不能动态执行 SQL(这点和存储过程不同)。

调用与管理方式

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

  • SELECT 中:SELECT addMaterialName('钢板', 'Q235B');
  • WHEREORDER BY 中:WHERE getAge(birth_date) > 18
  • 查看已创建函数:SHOW FUNCTION STATUS; 或查询 information_schema.ROUTINES
  • 删除函数:DROP FUNCTION IF EXISTS function_name;
星耀云
版权声明:本站原创文章,由 星耀云 2025-12-26发表,共计1194字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources