SQLite DEFAULT 约束用于设置列的默认值。当插入新记录而不指定任何值时,该列将采用默认值。

SQLite CREATE TABLE DEFAULT 约束

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

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

DEFAULT 约束也可用于插入系统值,方法是使用 CURRENT_TIMESTAMP 等函数:

CREATE TABLE Orders (
  OrderID INT NOT NULL,
  OrderQuantity INT NOT NULL,
  OrderPrice DECIMAL(18,2),
  OrderDate DATETIME DEFAULT CURRENT_TIMESTAMP
); 

SQLite ALTER TABLE DEFAULT 约束

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

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

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

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) DEFAULT 'London',
  Age INT,
  Salary DECIMAL(18,2)
);

INSERT INTO Employee SELECT * FROM Employee_old;

COMMIT;

PRAGMA foreign_keys=on; 

删除 DEFAULT约束

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

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

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

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;