it编程 > 数据库 > Mysql

MySQL中的函数是什么,有什么作用及应用场景分析

4人参与 2026-09-21 Mysql

mysql函数是‌数据库内置的操作指令集‌,可以直接在sql语句中调用,用于执行数据处理、转换、计算及流程控制等任务。‌‌

简单说,函数就像一个“黑盒”:你把参数丢进去,它经过内部运算后返回一个结果。函数必须有返回值,而且‌不会修改原始数据‌,只对查询结果进行加工。‌‌

前言

很多人容易把mysql函数和上一篇博客讲的存储过程弄混,两者虽然都是数据库中封装好的程序块,但在定义、调用方式、返回值上有很大区别。简单一句话:mysql函数,是一段封装好、必须有返回值的sql逻辑,像编程语言里的普通函数,传入参数,返回单个结果。

重点区分:函数一定有返回值;存储过程可以没有返回值,用out输出参数。函数可以直接写在select里;存储过程只能用call调用。

一、mysql函数是什么

mysql函数分为两大类:内置函数自定义函数(udf,user defined function)

  1. 内置函数:mysql原生自带,开箱即用。比如concat()字符串拼接、date_format()日期格式化、sum()count()聚合函数。
  2. 自定义函数:自己用sql编写,保存到数据库,一次定义,反复调用,需要指定返回值类型

自定义函数基础语法结构:

drop function if exists func_get_score_level;
delimiter $$
create function func_get_score_level(p_score int)
returns varchar(20)  -- 定义返回值类型,必不可少
deterministic  -- 相同输入,固定返回相同结果
begin
    declare res varchar(20);
    if p_score >= 90 then
        set res = '优秀';
    elseif p_score >= 60 then
        set res = '及格';
    else
        set res = '不及格';
    end if;
    return res; -- 必须return返回结果
end $$
delimiter ;

调用自定义函数,直接放在select中:

select func_get_score_level(78) as level;

注意:自定义函数有不少限制,不能使用call调用存储过程、不能使用事务、不能返回结果集,只能返回单个标量值。

二、函数的核心作用

  1. 逻辑复用:一段计算规则多处sql都要用,不用重复写一堆if/case,调用函数即可,统一规则。
  2. 简化sql语句:把复杂计算、格式转换封装,让select语句更清爽,可读性更高。
  3. 统一计算口径:报表、统计查询共用同一套计算逻辑,避免不同开发人员写出来的规则不一致。
  4. 隐藏复杂细节:上层业务只关心输入参数和最终结果,不用关心内部实现。

三、常见内置函数分类+示例

1. 字符串函数

-- 拼接字符串
select concat('姓名:',username) from user;
-- 截取子串
select substring(username,1,3) from user;
-- 字符串长度
select length(username) from user;

2. 日期函数

-- 格式化日期
select date_format(create_time,'%y-%m-%d') from user;
-- 获取当前日期
select curdate();
-- 日期加减
select date_add(curdate(),interval 7 day);

3. 数值函数

select round(3.1415,2); -- 四舍五入
select ceil(2.1); -- 向上取整
select floor(2.9); -- 向下取整

4. 聚合函数(分组统计,搭配group by)

sum() 求和
avg() 平均值
max() 最大值
min() 最小值
count() 计数

5. 流程控制函数

-- if判断
select if(score>=60,'及格','不及格');
-- case when
select case when score>=90 then '优秀' else '普通' end;

四、自定义函数的适用场景

✅ 适合场景

  1. 简单字段计算:比如根据订单金额、折扣,封装一个计算实付金额的函数;根据分数自动换算等级。
  2. 统一数据格式化:脱敏处理,手机号中间4位打码、身份证部分隐藏。
-- 简单脱敏示例
drop function if exists func_mask_phone;
delimiter $$
create function func_mask_phone(phone varchar(11))
returns varchar(11)
deterministic
begin
    return concat(substring(phone,1,3),'****',substring(phone,8));
end $$
delimiter ;
select func_mask_phone('13812345678');
  1. 报表维度统一转换:如根据时间戳自动返回季度、财年;根据编码转换名称。
  2. 多表查询中复用简单计算规则,直接嵌入select、where条件。

❌ 不适合场景

  1. 逻辑复杂、包含大量循环、多表查询;
  2. 需要返回多行、多列结果(这种要用存储过程);
  3. 涉及事务、回滚操作,函数不支持;
  4. 大数据量查询,函数作用在字段上会导致索引失效,严重影响性能。

五、函数 vs 存储过程(快速对比)

对比项自定义函数存储过程
返回值必须有且只能返回单个标量值无强制返回,可使用out输出多个结果
调用方式select func_name(参数)call proc_name(参数)
使用位置可写在select、where中不能嵌入select
事务不支持事务支持事务
返回结果集不能返回多行结果集可以select返回结果集
限制限制较多更灵活

六、注意事项

  1. 自定义函数如果写在where条件字段上,会造成无法走索引,大数据表慎用;
  2. deterministic标记:相同入参一定返回相同结果,很多数据库模式下必须加上;
  3. 内置函数优先使用,尽量少写自定义函数,自定义函数会增加数据库维护成本;
  4. 不要在函数内部做太重的计算,会拖慢查询速度。

小结

mysql函数就是用来做计算、转换的工具。内置函数日常开发天天在用;自定义函数适合封装简单、无副作用、需要多处复用的标量计算逻辑。
记住核心区别:函数重在计算返回一个值;存储过程重在执行一系列操作
实际开发,优先内置函数;复杂业务逻辑放到应用代码,自定义函数和存储过程都不要滥用。

补充:

🧩 函数分类

mysql函数主要分两大类:‌‌

🛠️ 主要作用

📋 常见应用场景

1. 字符串处理

2. 数值计算

3. 日期时间处理

4. 流程控制

5. 数据聚合

6. 数据安全

7. 动态sql生成

⚠️ 注意事项

不要在索引列外层包裹函数,比如 where year(create_time) = 2026 会导致索引失效,应改用区间写法 create_time >= '2026-01-01'。‌‌

自定义函数适合复用复杂业务公式(如绩效计算),但简单逻辑尽量优先用内置函数,性能和稳定性更好。‌‌

到此这篇关于mysql中的函数是什么,有什么作用及应用场景分析的文章就介绍到这了,更多相关mysql函数应用场景内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

MySQL写一个简单的存储过程(全过程)

09-21

mysql怎么注册成windows服务详细步骤教程

09-21

MySQL创建简单存储过程的新手入门教程

09-21

RabbitMQ实现延迟队列的三种方案代码和场景对比

09-21

C++ ORM 多数据库异构混合使用(同一项目同时连接 MySQL、PostgreSQL 和 SQLite)

09-21

Ubuntu Server设置静态ip/固定ip指南

09-20

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论