【MySQL基础】MySQL内置函数全面解析:提升你的数据库操作效率

MySQL 内置函数是数据库操作中提升效率的重要工具,它们能在数据库层面直接完成数据处理,减少应用层与数据库的交互成本。以下从常用分类核心函数解析使用技巧三个维度进行全面梳理,帮助高效应用。

一、函数分类与核心场景

MySQL 内置函数按功能可分为:字符串函数数值函数日期时间函数聚合函数条件函数系统函数等,覆盖数据处理的全流程。

二、核心函数解析(附示例)

1. 字符串函数(处理文本数据)

用于字符串拼接、截取、转换等,减少应用层字符串处理逻辑。
函数 功能描述 示例 结果
CONCAT(s1,s2,...) 拼接多个字符串(NULL 参与则返回 NULL) CONCAT('My', 'SQL', '5.7') 'MySQL5.7'
CONCAT_WS(sep,s1,...) 用分隔符 sep 拼接(忽略 NULL) CONCAT_WS('-', '2025', '07', NULL) '2025-07'
SUBSTRING(s,pos,len) 从 pos 位置截取 len 长度的子串(pos 从 1 开始) SUBSTRING('abcdef',2,3) 'bcd'
TRIM(s) 去除首尾空格 TRIM(' test ') 'test'
LOWER(s)/UPPER(s) 转换为小写 / 大写 UPPER('hello') 'HELLO'
LENGTH(s) 字符串字节数(UTF8 中汉字占 3 字节) LENGTH('你好') 6
CHAR_LENGTH(s) 字符串字符数(与编码无关) CHAR_LENGTH('你好') 2

2. 数值函数(处理数字计算)

在数据库层完成数值运算,避免应用层二次计算。
函数 功能描述 示例 结果
ABS(n) 绝对值 ABS(-3.14) 3.14
ROUND(n,d) 四舍五入保留 d 位小数(d 默认 0) ROUND(3.1415,2) 3.14
FLOOR(n) 向下取整(小于等于 n 的最大整数) FLOOR(3.9) 3
CEIL(n) 向上取整(大于等于 n 的最小整数) CEIL(3.1) 4
MOD(m,n) 取余(m 除以 n 的余数) MOD(7,3) 1
RAND() 生成 0~1 的随机数(每次调用不同) RAND() 0.82

3. 日期时间函数(处理时间数据)

高效处理时间计算,避免应用层时间格式转换错误。
函数 功能描述 示例 结果
NOW() 当前日期时间(YYYY-MM-DD HH:MM:SS) NOW() 2025-07-05 10:30:00
CURDATE()/CURTIME() 当前日期 / 当前时间 CURDATE() 2025-07-05
DATE_FORMAT(dt,format) 格式化日期(format 为格式符) DATE_FORMAT(NOW(),'%Y年%m月%d日') '2025年07月05日'
DATEDIFF(d1,d2) 计算 d1 - d2 的天数(只算日期部分) DATEDIFF('2025-07-05','2025-06-20') 15
TIMESTAMPDIFF(unit,d1,d2) 计算 d2 - d1 的指定单位差值(unit:DAY/MONTH/YEAR 等) TIMESTAMPDIFF(MONTH,'2023-01-01',NOW()) 30(假设 2025-07)
DATE_ADD(dt,INTERVAL expr unit) 日期加间隔(如加 3 天) DATE_ADD(CURDATE(),INTERVAL 3 DAY) 2025-07-08

4. 聚合函数(数据汇总统计)

快速完成分组统计,替代应用层循环计算。
函数 功能描述 场景示例
COUNT(*) 统计所有行数(包含 NULL) 统计总订单数:SELECT COUNT(*) FROM orders
COUNT(列名) 统计列中非 NULL 的行数 统计有手机号的用户数:SELECT COUNT(phone) FROM users
SUM(列名) 列值求和(忽略 NULL) 计算订单总金额:SELECT SUM(amount) FROM orders
AVG(列名) 列值平均值(忽略 NULL) 计算平均成绩:SELECT AVG(score) FROM exam
MAX(列名)/MIN(列名) 列值最大 / 最小值 查询最高工资:SELECT MAX(salary) FROM employees
注意:聚合函数常与GROUP BY配合,实现分组统计(如按分类统计商品数)。

5. 条件函数(处理分支逻辑)

在 SQL 中直接实现条件判断,减少应用层逻辑。
函数 功能描述 示例 结果(假设 score=85)
IF(cond,true_res,false_res) 条件判断(cond 为真返回 true_res,否则 false_res) IF(score>=60,'及格','不及格') '及格'
IFNULL(expr1,expr2) 若 expr1 为 NULL 则返回 expr2,否则返回 expr1 IFNULL(user.avatar,'default.png') 若 avatar 为 NULL 则返回默认头像
CASE函数 多分支判断(两种形式) 分数分级:
CASE WHEN score>=90 THEN 'A' WHEN score>=80 THEN 'B' ELSE 'C' END
'B'

6. 系统函数(数据库信息查询)

快速获取数据库元信息,辅助运维或日志记录。
函数 功能描述 示例结果
VERSION() 当前 MySQL 版本 '8.0.32'
DATABASE() 当前使用的数据库名 'test_db'
USER() 当前登录用户(格式:user@host 'root@localhost'

三、提升效率的使用技巧

  1. 优先在数据库层处理:用内置函数完成字符串截取、日期计算等,减少应用层与数据库的交互次数(例如:直接查询DATE_FORMAT(create_time,'%Y-%m')而非查原始时间后在应用层格式化)。
  2. 避免函数对索引的破坏WHERE子句中对索引列使用函数会导致索引失效(如WHERE YEAR(create_time)=2025),应改为范围查询(WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31')。
  3. 聚合函数配合索引:对SUM/COUNT等聚合列建立索引,可大幅提升统计效率(如对orders.amount建索引,SUM(amount)会更快)。
  4. 处理 NULL 值:用IFNULL/COALESCE将 NULL 转换为默认值,避免应用层判断(如SELECT IFNULL(price,0) FROM goods)。

总结

MySQL 内置函数通过在数据库层完成数据处理,减少了应用层与数据库的交互成本和数据传输量,是提升操作效率的核心工具。实际使用中需结合场景选择合适函数,并注意索引兼容性,才能最大化发挥其价值。
阅读剩余
THE END