SQLite 关键字

添加 UNIQUE 约束

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

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

例如,要对现有表 Employee 的 EmpID 列实施 UNIQUE 约束,可以使用以下语句:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE Employee RENAME TO Employee_old;

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

INSERT INTO Employee SELECT * FROM Employee_old;

COMMIT;

PRAGMA foreign_keys=on;

ADD PRIMARY KEY 约束

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

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

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

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE Employee RENAME TO Employee_old;

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

INSERT INTO Employee SELECT * FROM Employee_old;

COMMIT;

PRAGMA foreign_keys=on;

ADD FOREIGN KEY 约束

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

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

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

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE Contact_Info RENAME TO Contact_Info_old;

CREATE TABLE Contact_Info (
  Phone_Number VARCHAR(100),
  EmpID INT NOT NULL,
  PersonName VARCHAR(255),
  Address VARCHAR(255),
  FOREIGN KEY (EmpID) REFERENCES Employee(EmpID)
);

INSERT INTO Contact_Info SELECT * FROM Contact_Info_old;

COMMIT;

PRAGMA foreign_keys=on;

ADD CHECK 约束

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

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

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

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 CHECK (Age >= 21),
  Salary DECIMAL(18,2)
);

INSERT INTO Employee SELECT * FROM Employee_old;

COMMIT;

PRAGMA foreign_keys=on;

ADD 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;