MySQL NULL值 作者:马育民 • 2025-11-25 19:32 • 阅读:10001 # 介绍 `NULL` 在 MySQL 中表示 **缺失的值** 或 **未知的值** ,它不是一个具体的值(如 0、空字符串 `''` 或 `'NULL'`),而是一种状态。其核心特性包括: - `NULL` 不等于任何值,包括自身(`NULL = NULL` 的结果是 `NULL`,而非 `TRUE`)。 - `NULL` 参与的算术运算结果仍为 `NULL`(如 `10 + NULL = NULL`)。 - 聚合函数(如 `COUNT()`、`SUM()`)会自动忽略 `NULL` 值(`COUNT(*)` 除外)。 # NULL 与空字符串的区别 `NULL` 是“无值”,`''` 是“有值但为空”,两者不等价。 ```sql SELECT * FROM users WHERE email = ''; -- 匹配空字符串,不匹配 NULL SELECT * FROM users WHERE email IS NULL; -- 匹配 NULL,不匹配空字符串 ``` # NULL 的判断与比较 详见链接:https://www.malaoshi.top/show_1IXXR9qMp4E.html # NULL 在聚合函数中 - `COUNT(column)`:统计非 `NULL` 的记录数;`COUNT(*)`:统计所有记录数(包括 `NULL`)。 - `SUM(column)`、`AVG(column)`:忽略 `NULL` 值,仅计算非 `NULL` 数据。 ### 示例 ```sql -- 假设 users 表有 3 条记录:age 为 20、NULL、25 SELECT COUNT(age) FROM users; -- 结果:2(忽略 NULL) SELECT COUNT(*) FROM users; -- 结果:3(包含所有记录) SELECT AVG(age) FROM users; -- 结果:22.5((20+25)/2) ``` # NULL 在索引中的存储 - 普通索引(`INDEX`):允许存储 `NULL` 值,`IS NULL`/`IS NOT NULL` 可使用索引。 - 主键索引(`PRIMARY KEY`):不允许 `NULL` 值(主键字段必须非空)。 - 唯一索引(`UNIQUE`):允许多个 `NULL` 值(因为 `NULL` 不视为相等)。 **示例**: ```sql -- 唯一索引允许多个 NULL CREATE UNIQUE INDEX idx_email ON users(email); INSERT INTO users(email) VALUES (NULL), (NULL); -- 可执行,无冲突 ``` # NULL 的默认值与约束 - 字段未指定 `NOT NULL` 时,默认允许 `NULL`;指定 `NOT NULL` 则必须赋值。 - `DEFAULT NULL`:显式指定字段默认值为 `NULL`(默认行为)。 **示例**: ```sql -- 创建表时指定 NOT NULL 约束 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, -- 不允许 NULL email VARCHAR(50) DEFAULT NULL -- 允许 NULL(默认) ); ``` # 排序中的 NULL 升序(`ASC`)时 `NULL` 排在最前,降序(`DESC`)时排在最后。 ```sql SELECT * FROM users ORDER BY age ASC; -- NULL 在前 SELECT * FROM users ORDER BY age DESC; -- NULL 在后 ``` - **条件判断中的 NULL**:`WHERE` 子句中 `NULL` 相关条件结果为 `UNKNOWN`,不会返回记录。 # NULL 的处理函数 https://www.malaoshi.top/show_1IXlTQ9mVLZ.html # 总结 - **本质**:`NULL` 是“未知/缺失值”,非具体数值,需用 `IS NULL`/`IS NOT NULL` 判断。 - **比较规则**:普通运算符(`=`、`>` 等)对 `NULL` 无效,需用 `<=>` 或专用语法。 - **聚合与索引**:聚合函数忽略 `NULL`,普通索引存储 `NULL`,主键不允许 `NULL`。 - **最佳实践**:避免不必要的 `NULL`,关键字段(如主键、外键)设为 `NOT NULL`;处理 `NULL` 时使用 `IFNULL`/`COALESCE` 函数。 原文出处:http://www.malaoshi.top/show_1GW2ICBt2HJt.html