NULL 在 MySQL 中的含义
NULL 是 MySQL 中的一个特殊值,表示"未知"或"不存在"的数据。它不是空字符串、0 或任何其他默认值,而是一个独立的概念,用于标记缺失或未定义的数据。
NULL 的特性
NULL 与任何其他值的比较结果均为 NULL,包括与自身的比较。例如 NULL = NULL 的结果是 NULL,而不是 TRUE。判断是否为 NULL 必须使用 IS NULL 或 IS NOT NULL 运算符。
sql
SELECT * FROM table_name WHERE column_name IS NULL;
NULL 与空值的区别
空值(如空字符串 '' 或数字 0)是具体的值,而 NULL 表示"无值"。例如:
- 空字符串
''是长度为 0 的字符串。 - 数字
0是一个具体的数值。 - NULL 表示该字段未被赋值或未知。
处理 NULL 的函数
MySQL 提供了多个函数处理 NULL 值:
IFNULL(expr1, expr2):如果expr1为 NULL,则返回expr2。COALESCE(expr1, expr2, ...):返回第一个非 NULL 的表达式。NULLIF(expr1, expr2):如果expr1等于expr2,则返回 NULL,否则返回expr1。
sql
SELECT COALESCE(column_name, 'default_value') FROM table_name;
NULL 在索引中的行为
唯一索引(UNIQUE)允许包含多个 NULL 值,因为 NULL 被视为未知值,不违反唯一性约束。但主键(PRIMARY KEY)不允许 NULL 值。
默认值与 NULL
如果列定义为 NOT NULL,则必须显式指定默认值或插入时提供值,否则会报错。例如:
sql
CREATE TABLE example (
id INT NOT NULL,
name VARCHAR(100) DEFAULT 'unknown'
);
总结
NULL 是 MySQL 中表示缺失或未知数据的特殊标记。正确理解和使用 NULL 对于数据库设计和查询优化至关重要。