默认情况下,表的列为 NULL 值。 SQLite NOT NULL 约束用于强制列不接受 NULL 值。这可确保该列始终具有值,不可为空。

这意味着如果不为此列提供值,则无法插入新记录。同样,该列不能用 NULL 值更新。

SQLite  CREATE TABLE NOT NULL 约束

下面提到的语句创建一个名为 Employee 的表其中包含五列:EmpID、Name、City、Age 和 Salary其中 NOT NULL 约束应用于列 EmpID、Name 和 City。

CREATE TABLE Employee (
  EmpID INT NOT NULL,
  Name VARCHAR(255) NOT NULL,
  City VARCHAR(100) NOT NULL,
  Age INT,
  Salary DECIMAL(18,2)
); 

SQLite ALTER TABLE NOT NULL 约束

SQLite 不支持 ALTER TABLE 语句向现有表添加 NOT NULL 约束。但是,这可以通过以下步骤来实现:

  • 应检查外键约束
  • 将表重命名为其他名称
  • 创建一个结构相同但添加 NOT NULL 约束的新表
  • 将重命名表中的数据复制到新表
  • 最后打开外键约束

例如,要对现有表Employee的EmpID列强制执行NOT NULL约束,可以使用以下语句:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE Employee RENAME TO Employee_old;

CREATE TABLE Employee (
  EmpID INT NOT NULL,
  Name VARCHAR(255),
  City VARCHAR(100),
  Age INT,
  Salary DECIMAL(18,2)
);

INSERT INTO Employee SELECT * FROM Employee_old;

COMMIT;

PRAGMA foreign_keys=on; 

删除 NOT NULL 约束

SQLite 不支持 ALTER TABLE 或 DROP 语句从表中删除现有的 NOT NULL 约束。为此,可以使用以下步骤:

  • 应检查外键约束
  • 将表重命名为其他名称
  • 创建一个结构相同但删除 NOT NULL 约束的新表
  • 将重命名表中的数据复制到新表
  • 最后打开外键约束

例如,要从现有表 Employee 的 EmpID 列中删除 NOT NULL 约束,可以使用以下语句:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE Employee RENAME TO Employee_old;

CREATE TABLE Employee (
  EmpID INT,
  Name VARCHAR(255),
  City VARCHAR(100),
  Age INT,
  Salary DECIMAL(18,2)
);

INSERT INTO Employee SELECT * FROM Employee_old;

COMMIT;

PRAGMA foreign_keys=on;