NOT NULL
NOT NULL 约束确保列值不能为空。
默认情况下,表的任何列都可以存储 NULL。NULL 不等于空字符串 '',也不等于数字 0,它代表"未知"或"不存在"。这在某些场景下有用,但在关键业务字段上就是定时炸弹。试想一下:员工姓名是 NULL,工资条怎么生成?商品价格是 NULL,订单金额怎么算?凡是业务上"必须有值"的字段,都应该加上 NOT NULL。
NOT NULL 还有一个容易被忽视的好处:它能让聚合计算更可靠。COUNT、SUM、AVG 等函数会自动忽略 NULL 值,如果某列大量数据是 NULL,统计结果就会有偏差。强制 NOT NULL 能避免这类"静默错误"。
标准写法:
-- 建表时指定
CREATE TABLE 表名 (
列名 数据类型 NOT NULL
);
-- 修改已有列
ALTER TABLE 表名
MODIFY COLUMN 列名 数据类型 NOT NULL;
以飞翔科技为例。员工表里,姓名和基本工资是绝对的核心字段,缺一不可:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
basic_salary DECIMAL(10,2) NOT NULL,
performance_bonus DECIMAL(10,2) DEFAULT 0.00 -- 奖金可以不填,默认为 0
);
-- 这条件 SQL 会被数据库直接拒绝
INSERT INTO employees (emp_id, emp_name, basic_salary)
VALUES (10001, NULL, 8888.88);
-- Error: Column 'emp_name' cannot be null
-- 正确写法
INSERT INTO employees (emp_id, emp_name, basic_salary, performance_bonus)
VALUES (10001, '翱翔', 8888.88, 18888.88);
注意 performance_bonus 没有 NOT NULL——不是所有员工都有绩效奖金,没填就默认 0.00,这是合理的。但姓名和基本工资一旦为 NULL,整条记录就失去了业务意义。划好这条线,脏数据就被挡在门外了。