mysql 为什么我可以在SQLite中为主键添加null值?

sq1bmfud  于 2023-10-15  发布在  Mysql
关注(0)|答案(4)|浏览(129)

我有这个代码,你可以在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?

qnakjoqk

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的事实。

wgx48brx

wgx48brx2#

在SQLite中,基本上可以将NULL添加到PRIMARY KEY列,但不能将NULL添加到INTEGER PRIMARY KEYINTEGER PRIMARY KEY AUTOINCREMENT列,即使它们没有NOT NULL约束。我的回答更能说明问题。

erhoui1w

erhoui1w3#

如果我没记错的话,MySQL不允许主键(ID)存储NULL。所以你的ID列不能存储NULL值。

bmp9r5qi

bmp9r5qi4#

ID字段是主键(字段上存在主索引),这就是字段不能接受空值的原因。它不应该有空的唯一值。
正式文件:
https://dev.mysql.com/doc/refman/8.0/en/constraint-primary-key.html

相关问题