说一下数据库中的NULL
更多面试题请看这里:https://interview.raoyunsoft.com/
NULL 表示一个未知或缺失的值,它既不是空字符串 ''
也不是数字 0
。在 MySQL 中需要特别注意以下几点:
核心特性
-
比较陷阱
任何与 NULL 的比较操作都会返回 NULL(表示未知结果):SELECT NULL = 1; -- 返回 NULL SELECT NULL = NULL; -- 返回 NULL(不是 TRUE!)
-
正确判断方式
必须使用IS NULL
或IS NOT NULL
进行判断:SELECT * FROM users WHERE phone IS NULL; -- 正确
-
与空字符串的区别
特性 NULL 空字符串 ''
数据类型 未知状态 明确字符串 长度 无 长度=0 聚合函数忽略 ✅ ❌
使用注意事项
- 索引影响:
InnoDB 中唯一索引允许存在多个 NULL 值(因为 NULL 不等于任何值,包括自身) - 计算陷阱:
包含 NULL 的运算结果通常为 NULL:SELECT 10 + NULL; -- 返回 NULL
- 聚合函数行为:
COUNT(column)
会忽略 NULL 值,而COUNT(*)
会统计所有行
实际场景示例
假设用户表包含允许 NULL 的电话字段:
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,phone VARCHAR(20) NULL -- 允许 NULL
);-- 插入数据
INSERT INTO users VALUES
(1, 'Alice', '13800138000'),
(2, 'Bob', NULL); -- 未知电话号码
查询未填写电话的用户时:
-- ✅ 正确方式
SELECT name FROM users WHERE phone IS NULL; -- 返回 Bob-- ❌ 错误方式
SELECT name FROM users WHERE phone = NULL; -- 无结果返回!