MySQL 空值(NULL)处理深度指南
MySQL 空值(NULL)处理深度指南
⚠️ NULL 处理的八大关键注意事项
1. NULL 的本质特性
SELECT NULL = NULL; -- NULL (不是true!)
SELECT NULL IS NULL; -- 1 (true)
SELECT 1 + NULL; -- NULL
核心认知:
- NULL 表示未知或不存在的值
- 任何与 NULL 的运算结果都是 NULL
- NULL 不等于空字符串
''
或0
2. 比较运算符陷阱
-- 错误方式(返回空结果集)
SELECT * FROM employees WHERE bonus = NULL;
-- 正确方式
SELECT * FROM employees WHERE bonus IS NULL;
SELECT * FROM employees WHERE bonus IS NOT NULL;
3. 聚合函数中的 NULL 忽略
CREATE TABLE sales (amount INT);
INSERT INTO sales VALUES (100), (NULL), (200);
SELECT
SUM(amount) -- 300 (忽略NULL)
AVG(amount) -- 150 (300/2)
COUNT(amount) -- 2 (非NULL行数)
FROM sales;
4. 空值在索引中的处理
-- 普通索引不包含NULL值
ALTER TABLE products ADD INDEX idx_price (price);
-- 查询NULL值无法使用索引
SELECT * FROM products WHERE price IS NULL; -- 全表扫描
-- 解决方案:函数索引(MySQL 8.0+)
ALTER TABLE products
ADD INDEX idx_price_null (
上一篇: 几秒钟就充满电!科学
下一篇: 暂无数据