MySQL中NULL表示未知或缺失值,需用IS NULL/IS NOT NULL判断;可用COALESCE/IFNULL替换默认值;聚合函数忽略NULL,COUNT(*)与COUNT(col)行为不同;建表应合理设NOT NULL与DEFAULT;LEFT JOIN中WHERE过滤NULL需谨慎。
MySQL 中的 NULL 表示“未知”或“缺失值”,它不是空字符串('')也不是数字 0,而是一个特殊的标记。直接用
或
判断 NULL 会返回 NULL(即逻辑上“未知”),导致查询结果不符合预期。正确处理 NULL 是写可靠 SQL 的基础。
判断 NULL 要用 IS NULL / IS NOT NULL
不能写
或
,这永远不成立。必须使用专用操作符:
—— 找出该列为 NULL 的记录
—— 找出该列非 NULL 的记录
注意:
和
是操作符,不是函数,不加括号
用 COALESCE 或 IFNULL 统一替换 NULL 值
当需要把 NULL 显示为默认值(如 0、'未知'、当前时间等),推荐用
(标准 SQL,支持多参数)或
(MySQL 特有,仅两个参数):
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
—— 返回第一个非 NULL 值
—— age 为 NULL 时返回 0
聚合函数
(如 SUM、AVG)默认自动忽略 NULL,但 COUNT(*) 和 COUNT(col) 行为不同:前者统计所有行,后者只统计 col 非 NULL 的行
建表时合理设置 NULL 属性与默认值
定义字段时明确是否允许 NULL,比后期补救更安全:
建表时加
约束,配合
值,避免意外 NULL
例如:
对必填字段(如用户名、创建时间)优先设为 NOT NULL;对可选字段(如备注、头像 URL)可允许 NULL,但要在业务层或 SQL 中主动处理
JOIN 中 NULL 可能导致意外丢失数据
LEFT JOIN 右表无匹配时,右表字段全为 NULL。若在 WHERE 条件中误加
,会把整行过滤掉(因为 NULL = 'x' 为 FALSE),实际应改用
条件或显式允许 NULL:
错误:
—— 把没订单的用户也排除了
正确:
,或在 WHERE 中写
=!=WHERE col = NULLWHERE col != NULLWHERE col IS NULLWHERE col IS NOT NULLIS NULLIS NOT NULLCOALESCE()IFNULL()SELECT COALESCE(phone, '未填写') FROM users;SELECT IFNULL(age, 0) FROM users;NOT NULLDEFAULTstatus TINYINT NOT NULL DEFAULT 1right_table.col = 'x'ONLEFT JOIN orders ON u.id = o.user_id WHERE o.status = 'paid'LEFT JOIN orders ON u.id = o.user_id AND o.status = 'paid'o.status = 'paid' OR o.status IS NULL