SQLite 不支持 ALTER COLUMN 关键字来修改表的现有列。但是,这可以通过以下步骤来实现:
- 应检查外键约束
- 将表重命名为其他名称
- 创建一个结构相同但修改列的新表
- 将重命名表中的数据复制到新表
- 最后开启外键约束
示例:
考虑一个名为 Employee 的数据库表,其结构如下:
cid | Name | Type | notnull | dflt_value | pk |
---|---|---|---|---|---|
0 | EmpID | INT | 1 | 1 | |
1 | Name | VARCHAR(255) | 1 | 0 | |
2 | City | VARCHAR(100) | 0 | 0 | |
3 | Age | INT | 0 | 0 | |
4 | Salary | DECIMAL(18,2) | 0 | 0 |
在上面的例子中,Age列的数据类型是INT。要将列的数据类型更改为 DOUBLE,可以使用以下语句:
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 DOUBLE,
Salary DECIMAL(18,2)
);
INSERT INTO Employee SELECT * FROM Employee_old;
COMMIT;
PRAGMA foreign_keys=on;
这会将 Age 列的数据类型从 INT 更改为 DOUBLE。