我有这个代码,你可以在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?
4条答案
按热度按时间qnakjoqk1#
感谢@astentx的建议。我查了一下文件,上面说:
根据SQL标准,PRIMARY KEY应该总是隐含NOT NULL。不幸的是,由于一些早期版本中的bug,SQLite中并非如此。除非列是INTEGER PRIMARY KEY或表是WITHOUT ROWID表或列声明为NOT NULL,否则SQLite允许PRIMARY KEY列中的NULL值。可以修复SQLite以符合标准,但这样做可能会破坏遗留应用程序。因此,我们决定只记录SQLite在大多数PRIMARY KEY列中允许NULL的事实。
wgx48brx2#
在SQLite中,基本上可以将
NULL
添加到PRIMARY KEY
列,但不能将NULL
添加到INTEGER PRIMARY KEY
和INTEGER PRIMARY KEY AUTOINCREMENT
列,即使它们没有NOT NULL
约束。我的回答更能说明问题。erhoui1w3#
如果我没记错的话,MySQL不允许主键(ID)存储NULL。所以你的ID列不能存储NULL值。
bmp9r5qi4#
ID字段是主键(字段上存在主索引),这就是字段不能接受空值的原因。它不应该有空的唯一值。
正式文件:
https://dev.mysql.com/doc/refman/8.0/en/constraint-primary-key.html