我有这个代码,你可以试试db-fiddle:
CREATE TABLE EMPLOYEE
( ID INT,
Name VARCHAR(15) NOT NULL,
Age INT,
Dnumber INT,
Level INT,
PRIMARY KEY (ID)
);
INSERT INTO EMPLOYEE (ID, Name, Age, Dnumber, Level) VALUES(1,'Tom', 21, 2, 5);
INSERT INTO EMPLOYEE (ID, Name, Age, Dnumber, Level) VALUES(2,'Lucky', 22, 2, 3);
INSERT INTO EMPLOYEE (ID, Name, Age, Dnumber, Level) VALUES(NULL,'Blue', 22, 2, 3);
如果我使用 SQLite,我可以添加 NULL 值,但如果我使用 MySQL,则不能。我会收到此错误:
Schema Error: Error: ER_BAD_NULL_ERROR: Column 'ID' cannot be null
为什么我可以将其添加到SQLite?
感谢@astentx 的建议。我检查了文档,它说:
根据 SQL 标准,PRIMARY KEY 应始终暗示 NOT NULL。不幸的是,由于某些早期版本中的错误,SQLite 中并非如此。除非列是 INTEGER PRIMARY KEY 或表是WITHOUT ROWID 表或列声明为 NOT NULL,否则 SQLite 允许在 PRIMARY KEY 列中使用 NULL 值。 SQLite 可以修复以符合标准,但这样做可能会破坏遗留应用程序。因此,决定仅记录 SQLite 在大多数 PRIMARY KEY 列中允许 NULL 的事实。
在 SQLite 中,基本上,您可以将
NULL
添加到 PRIMARY KEY
列,但不能将 NULL
添加到 INTEGER PRIMARY KEY
和 INTEGER PRIMARY KEY AUTOINCREMENT
列,即使它们没有 NOT NULL
约束。 我的回答解释得更多。
如果我没记错的话,MySQL 不允许主键(ID)存储 NULL。 所以你的 ID 列不能存储 NULL 值。
ID字段是主键(该字段存在主索引),这就是该字段不能接受空值的原因。它不应该有空的唯一值。
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/constraint-primary-key.html