groupsという名前のテーブルがあり、その列の 1 つの名前を変更したいと考えています。これまでのところ、大丈夫でした。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
のレコードも削除されるため、次のことを行う必要がありました。
- メンバーと同じ列を持ち、外部キーを持たないテーブルtmp_membersを作成します。
- メンバーからのレコードをtmp_members に挿入します。
- テーブルメンバーを削除します。
- 最初の部分からコードを実行します (グループテーブルを使用)。
- 外部キーを使用してテーブル メンバーを再作成します。
- tmp_membersのメンバーデータに挿入します。
男、それは疲れた!単純に列の名前を変更するにはコードが多すぎます。
この制約の問題を処理する簡単な方法はありますか、それとも「sqlite の方法」ですか?