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