添加 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 约束。但是,这可以通过以下步骤来实现:
- 应检查外键约束
- 将表重命名为其他名称
- 创建一个结构相同但添加了CHECK约束的新表
- 将重命名表中的数据复制到新表
- 最后打开外键约束
例如,要对现有表 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;