1. ホーム
  2. sql

[解決済み] 既存のSQLiteテーブルに外部キーを追加するにはどうすればよいですか?

2022-05-10 11:40:58

質問

次のような表があります。

CREATE TABLE child( 
  id INTEGER PRIMARY KEY, 
  parent_id INTEGER, 
  description TEXT);

に外部キー制約を追加するにはどうすればよいですか。 parent_id ? 外部キーが有効になっていると仮定します。

ほとんどの例では、テーブルを作成することを前提としています。既存のテーブルに制約を追加したいのですが。

どのように解決するのですか?

できません。

テーブルに外部キーを追加するSQL-92の構文は次のようになりますが。

ALTER TABLE child ADD CONSTRAINT fk_child_parent
                  FOREIGN KEY (parent_id) 
                  REFERENCES parent(id);

SQLiteは その ADD CONSTRAINT のバリアントです。 ALTER TABLE コマンド( sqlite.org: SQLiteが実装していないSQLの機能 ).

したがって、sqlite 3.6.1では外部キーを追加する唯一の方法は CREATE TABLE を以下のように設定します。

CREATE TABLE child ( 
    id           INTEGER PRIMARY KEY, 
    parent_id    INTEGER, 
    description  TEXT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

残念ながら、既存のデータを一時テーブルに保存し、古いテーブルを削除して、FK制約付きの新しいテーブルを作成し、一時テーブルからデータをコピーバックする必要があります。( sqlite.org - FAQ: Q11 )