私が知る限り、SQLite 3には外部キーの制約がありません。これには多対多のテーブルが必要です。外部キー制約に違反したときにABORTを発生させるトリガーを作成します。sqlite3上の複数のキーにトリガーを作成するには
CREATE TRIGGER fkFooBar
BEFORE INSERT ON Foo_Bar
FOR EACH ROW BEGIN
SELECT RAISE (ABORT, 'Insert on Foo_Bar violates foreign key')
WHERE ((SELECT id as fId FROM FOO WHERE fId = NEW.fooId) IS NULL) || ((SELECT id as bId FROM BAR WHERE bId = NEW.barId) IS NULL);
END;
しかし、存在しているbarIdで、この唯一の制約はなく、fooId:私の文は次のようになります。私は漠然とSQLに精通しており、以前はトリガーを扱っていないので、これについて少し迷っています。なぜこれは機能しませんか?私はこれについて間違った方法をとっていますか?これははるかに簡単なはずですか? (つまり、1つのSELECT文で)
右ツールは何ですか? –
コード。平凡な古いコード。あなたのアプリケーションはどの言語で書かれていますか?その言語を使用します。オブジェクト・リレーショナル・マッピング(ORM)層を使用している場合は、データベースではなく「トリガー」コードが入ります。 –