MySQL 函数本身不是新手入门的起点,但掌握几个核心函数是绕不开的实战需求——关键不在“学多少函数”,而在“什么时候该用、怎么用对、为什么出错”。
哪些 MySQL 函数新手必须马上会用
刚连上数据库,想查数据、算结果、补空值,根本等不及学完所有函数。以下 5 个覆盖 80% 日常查询场景,优先级最高:
IFNULL():处理
NULL最轻量的方式,比如
SELECT IFNULL(price, 0) FROM products;别用
COALESCE()替代它来简单填空,多一层解析开销
COUNT()和
COUNT(*)区别必须清楚:
COUNT(col)忽略
NULL,
COUNT(*)统计行数,哪怕全为
NULL也计 1
DATE_FORMAT()是读日期的刚需,但新手常写成
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i')却忘了字段本身是
DATETIME还是
TIMESTAMP,时区隐式转换可能让结果偏移
CONCAT()拼字符串时,任意参数为
NULL整体返回
NULL,要用
CONCAT_WS('-', col1, col2) 或提前套 IFNULL()
ROUND()默认四舍五入到整数,要保留小数得写
ROUND(price, 2),不加第二参数就等于砍掉全部小数位
新手最容易踩坑的函数行为
不是语法写错,而是对函数“默认逻辑”没概念,导致结果看似正常实则埋雷:
SUM()对空结果集返回
NULL,不是
0;聚合前没加
WHERE或关联失败时,前端显示为空或报错,常被误判为数据问题
GROUP BY后用
SELECT *在 MySQL 5.7+ 默认报错(
ONLY_FULL_GROUP_BY开启),但很多人关掉这个模式后,发现
SELECT name, MAX(age), city中
city值是随机的——它根本没参与分组逻辑
STR_TO_DATE()解析字符串日期时,格式符必须严格匹配,
'2023/05/01'要写
STR_TO_DATE('2023/05/01', '%Y/%m/%d'),写成 '%Y-%m-%d'就返回
NULL
LIKE不是函数但常和函数混用:前导通配符
LIKE '%abc'无法走索引,而
LEFT(col, 3) = 'abc'可能走索引(取决于函数是否被索引覆盖)
别急着学函数,先搞清执行顺序
很多“函数没生效”的问题,根源是不知道 MySQL 实际执行流程:
WHERE在
GROUP BY之前,所以不能在
WHERE里用
AVG()、
SUM()等聚合函数
HAVING才是过滤分组结果的地方,
HAVING COUNT(*) > 1合法,
WHERE COUNT(*) > 1直接报错
ORDER BY和
LIMIT是最后执行的,所以
ORDER BY RAND()会先全表排序再取 1 条,大数据量极慢 窗口函数(如
ROW_NUMBER())在 MySQL 8.0+ 才支持,5.7 里硬写会报
FUNCTION xxx does not exist
函数只是工具,真正卡住新手的从来不是记不住
UPPER()和
LOWER(),而是查半天发现
WHERE created_at > '2023-01-01'没结果,其实字段是
INT存的时间戳——类型不匹配时函数和比较都失效,但 MySQL 往往静默转成 0 或截断,很难察觉。
