我有一个名为 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
的外键也会删除其记录,所以我必须做以下事情:
男人,累了!它太多的代码只需重命名一列;
有没有更简单的方法来处理这个约束问题,或者这是" sqlite方式"?
答案 0 :(得分:3)
由于历史原因,SQLite允许禁用外键约束(这甚至是当前的默认值)。
在执行groups
表格之前,只需运行PRAGMA foreign_keys = off。
也可以使用PRAGMA writable_schema重命名列,但只有在您知道自己正在做什么的情况下才应该这样做。