SQLiteで外字キー設定する

普段は外字キー(FK)は ALTER TABLE 文で適用してたけど、SQLite だと ALTER TABLE 文が使えなくて、直接 CREATE TABLE 文に埋め込むのが正しいらしい。

FK制約を設定する場合、こんな感じに CREATE TABLE 文を書く。

CREATE TABLE album(
albumartist TEXT,
albumname TEXT,
albumcover BINARY,
PRIMARY KEY(albumartist, albumname)
);

CREATE TABLE song(
songid INTEGER,
songartist TEXT,
songalbum TEXT,
songname TEXT,
FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname)
);

4.1. Composite Foreign Key Constraints

必要なら ON DELETE CASCADE なんかも使える。 詳しくは 4.3. ON DELETE and ON UPDATE Actions を参照するといいよ。

ちなみに SQLite はデフォルトで FK は無視される。有効にする場合、次のコマンドを実行する必要がある。忘れないようにね。:-)

sqlite> PRAGMA foreign_keys = ON;

有効かどうかを知りたい場合は、こんな感じ。

sqlite> PRAGMA foreign_keys;
0
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1
sqlite> PRAGMA foreign_keys = OFF;
sqlite> PRAGMA foreign_keys;
0

2. Enabling Foreign Key Support

その他、いろいろ載ってるから、詳しくは SQLite Foreign Key Support を見ましょ :-)