【发布时间】:2014-08-19 20:00:09
【问题描述】:
我有一个名为 groups 的表,我想重命名其中的一列。到目前为止还可以。我知道 sqlite 不支持重命名列,所以我做了:
ALTER TABLE groups RENAME to tmp_groups;
CREATE TABLE groups(
_ID integer primary key autoincrement,
new_column_name integer
);
INSERT INTO groups(_ID, new_column_name) SELECT _ID, old_column_name FROM tmp_groups;
DROP TABLE tmp_groups;
但是,当我删除表 tmp_groups 时,具有 ON DELETE CASCADE 外键的表 members 的记录也被删除,所以我不得不执行以下操作:
- 创建一个表tmp_members,其列与成员相同,但没有外键;
- 在 tmp_members 中插入来自 members 的记录;
- 删除表成员;
- 从第一部分运行代码(使用 groups 表);
- 使用其外键重新创建表成员;
- 插入来自 tmp_members 的 members 数据;
伙计,那太累了!简单地重命名列的代码太多;
有没有更简单的方法来处理这个约束问题,或者这就是“sqlite方式”?
【问题讨论】:
标签: android sql sqlite table-rename