sqlite3で外部キー(foreign key)を有効にする方法| プロサバメモ

WEBプログラミングやサーバ設定などのメモ場

sqlite3で外部キー(foreign key)を有効にする方法

2022.02.142023.02.02

sqlite3で外部キー(foreign key)を有効にする方法を紹介します。

sqlite3のデフォルトでは外部キー(foreign key)を使用できない。
(CREATE TABLEで、外部キーのあるテーブル自体は作成できるが、使用時にその外部キー制約が完全無視される。。。)

以下サンプルテーブル
test2テーブルにtestテーブルのid列を参照する外部キーtest_id列を作成してみる。

サンプルテーブル

CREATE TABLE test(
    id int primary key,
    name varchar(32)
);


CREATE TABLE test2(
    id int primary key,
    name varchar(32),
    test_id int,
    foreign key (test_id) references test(id)
);

test2テーブルに外部キー(test_id)は問題なく作成できるが、このままでは外部キーは有効になっていない。
(外部キー制約に違反するデータをinsertできてしまう。。。)

外部キーを有効にするには、sqliteで以下のコマンドを実行する。

sqliteコマンド

sqlite> PRAGMA foreign_keys=true;

これで外部キーが有効になり、test2テーブルに以下のデータがinsertできなくなる。

外部キーが有効になっている

sqlite> INSERT INTO test VALUES (1,'hoge');
sqlite> INSERT INTO test2 VALUES (1,'test',2);

Error: foreign key constraint failed

ワンライナーコマンドでも

[root@localhost ~]# sqlite3 test "PRAGMA foreign_keys=true; INSERT INTO test2 VALUES (2,'name',11);"

Error: foreign key constraint failed

関連記事

TOP