在MySQL中创建函数,需要使用 CREATE FUNCTION 语句。函数可以接收参数、执行逻辑操作,并返回一个值。它常用于封装重复使用的计算逻辑或数据处理过程。
基本语法格式
CREATE FUNCTION 函数名(参数名 参数类型)
RETURNS 返回值类型
[DETERMINISTIC | NOT DETERMINISTIC]
[READS SQL DATA | MODIFIES SQL DATA | CONTAINS SQL]
BEGIN
-- 函数体:变量声明、控制结构、SQL语句等
RETURN 返回值;
END;
说明:
函数名:自定义的函数名称,需保证在数据库中唯一。 参数:只能是输入参数(IN),不支持输出或输入输出参数。 RETURNS:必须指定返回值的数据类型,如 INT、VARCHAR、DECIMAL 等。 DETERMINISTIC:表示是否对相同输入总是返回相同结果。如果函数依赖于表数据或随机值,应设为 NOT DETERMINISTIC(默认)。 READS SQL DATA:如果函数中包含 SELECT 查询但不修改数据,建议加上此选项。 BEGIN...END:函数体部分,包含具体逻辑。创建函数示例
假设有一个员工表 employees,包含字段 salary(工资),我们想创建一个函数来判断工资等级:
DELIMITER $$
<p>CREATE FUNCTION get_salary_level(salary DECIMAL(10,2))
RETURNS VARCHAR(10)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE level VARCHAR(10);
IF salary >= 10000 THEN
SET level = 'High';
ELSEIF salary >= 5000 THEN
SET level = 'Medium';
ELSE
SET level = 'Low';
END IF;
RETURN level;
END$$</p><p>DELIMITER ;</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/learn/2593" title="动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版"><img
src="https://www.herecours.com/d/file/efpub/2026/28-28/20260228123148722275.jpg" alt="动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/learn/2593" title="动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版">动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版</a>
<p>动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包</p>
</div>
<a href="/xiazai/learn/2593" title="动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>调用方式:
SELECT name, salary, get_salary_level(salary) AS level FROM employees;
注意事项与权限要求
用户需要有 CREATE ROUTINE 权限才能创建函数。 若启用了二进制日志(binlog),MySQL 默认要求函数声明为 DETERMINISTIC 或使用特定安全选项,否则会报错。可设置:SET GLOBAL log_bin_trust_function_creators = 1;或在创建时显式加上 DETERMINISTIC、NO SQL 等属性。 函数不能修改表数据(即不能有 INSERT、UPDATE、DELETE),除非声明为 MODIFIES SQL DATA。 使用 DELIMITER 更改语句结束符(如从 ; 改为 $$),避免函数体内分号提前结束语句。
查看和删除函数
查看已创建的函数:
SHOW FUNCTION STATUS WHERE Db = '数据库名';
删除函数:
DROP FUNCTION [IF EXISTS] 函数名;
基本上就这些。掌握语法、注意权限和日志限制,就能顺利创建和使用MySQL函数。
