当其他表具有外键时,在sqlite中更改列名

时间:2014-08-19 20:00:09

标签: android sql sqlite table-rename

我有一个名为 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的外键也会删除其记录,所以我必须做以下事情:

  1. 使用与成员相同的列创建表 tmp_members ,而不使用外键;
  2. tmp_members 中插入来自成员的记录;
  3. 删除表成员;
  4. 运行第一部分的代码(使用表);
  5. 使用其外键重新创建表成员;
  6. tmp_members 插入成员数据;
  7. 男人,累了!它太多的代码只需重命名一列;

    有没有更简单的方法来处理这个约束问题,或者这是" sqlite方式"?

1 个答案:

答案 0 :(得分:3)

由于历史原因,SQLite允许禁用外键约束(这甚至是当前的默认值)。

在执行groups表格之前,只需运行PRAGMA foreign_keys = off


也可以使用PRAGMA writable_schema重命名列,但只有在您知道自己正在做什么的情况下才应该这样做。