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;