私はSQLite3でRubyを使用していますが、Sqlite3で外部キーを使用する試みは残念ながら成功しませんでした。によるとsqlite3 --version
、バージョン3.7.13がインストールされています。私の知る限り、Sqlite3はバージョン3.6.x以降の外部キーをサポートしています。
外部キーはデフォルトで非アクティブ化されており、を使用してアクティブ化する必要があることを知っていますPRAGMA foreign_keys = ON;
。私のRubydb-create-scriptでは、次のようなことをしています。
sql = <<-SQL
PRAGMA foreign_keys = ON;
CREATE TABLE apps (
id ....
);
CREATE TABLE requests (
...
app_id INTEGER NOT NULL,
FOREIGN KEY(app_id) REFERENCES apps(id),
);
...
SQL
db.execute_batch(sql)
残念ながら、不明なapp-idを使用して行を挿入することはできますrequests
が、機能しますが、もちろんそうではありません。
興味深い:sqlite3シェルを直接使用すると、次の動作を観察できます。
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1 // as expected
sqlite> .quit
$ sqlite3 database.db
sqlite> PRAGMA foreign_keys;
0 // off ?!
sqlite3シェルを終了しないと、外部キーはアクティブ化した後に機能し(シェルを終了しません)、不明なapp_idを持つ行を挿入することはできません。