3

我有一个名为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时,具有外键的表membersON DELETE CASCADE也删除了其记录,因此我必须执行以下操作:

  1. 创建一个表tmp_members与成员相同的列,并且没有外键;
  2. tmp_members中插入来自成员的记录;
  3. 删除表成员
  4. 运行第一部分的代码(使用表);
  5. 使用其外键重新创建表成员;
  6. 从tmp_members插入成员数据;

伙计,那很累!简单地重命名列的代码太多;

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

4

1 回答 1

3

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

在做表格之前运行PRAGMA foreign_keys = off 。groups


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

于 2014-08-20T07:55:07.483 回答