在 MySQL 中,主键(Primary Key) 不能 包含 NULL 值,这是关系型数据库设计的基本原则之一。
如果你尝试创建一个允许 NULL 的主键,MySQL 会报错:
CREATE TABLE test (
id INT NULL PRIMARY KEY
);
-- 错误: PRIMARY KEY 不能包含 NULL 列
如果需要类似功能,可以考虑:
自增主键:使用 AUTO_INCREMENT
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
复合主键:如果单列不能满足需求,可以使用多列组合
CREATE TABLE order_items (
order_id INT NOT NULL,
item_id INT NOT NULL,
quantity INT,
PRIMARY KEY (order_id, item_id)
);
唯一索引:如果确实需要允许 NULL,可以使用 UNIQUE 索引(但要注意 NULL 的特殊处理)
CREATE TABLE test (
id INT NULL,
UNIQUE (id)
);
在 MySQL 中,UNIQUE 索引对 NULL 值的处理比较特殊: - 可以包含多个 NULL 值(因为 NULL 不等于 NULL) - 这与一些其他数据库系统(如 SQL Server)的行为不同