0

以下は単純なスキーマです。

sqlite> .schema recordtypes
CREATE TABLE recordtypes (record_id text primary key);
sqlite> .schema headers
CREATE TABLE headers (header_id text primary key);
sqlite> .schema record_to_headers
CREATE TABLE record_to_headers (id INTEGER, recordid TEXT, headerid TEXT, FOREIGN KEY(recordid) REFERENCES recordtypes(record_id), FOREIGN KEY(headerid) REFERENCES headers(header_id));

recordtypes次に、値を に挿入してから に挿入しrecord_to_headersます。

sqlite> insert into recordtypes values("test");
sqlite> insert into record_to_headers values (1, "test", "yeah");

recordtypes次に、テーブルからも削除されることを期待してテーブルから「テスト」を削除しrecord_to_headersますが、これは決して起こりません:

sqlite> delete from recordtypes where record_id = "test";
sqlite> select * from recordtypes;
sqlite> select * from record_to_headers;
1|test|yeah

テーブルから値を削除すると、recordtypesテーブルからも削除されるという動作が必要record_to_headerです。やり方のアドバイスお願いします。どうもありがとう。

4

1 に答える 1

2

SQLLite の経験はそれほど多くありませんが、ドキュメントからわかるように、SQLLite は外部キーのカスケードをサポートしています。親行が削除されると、子行が削除されます。

FOREIGN KEY(headerid) REFERENCES headers(header_id) ON DELETE CASCADE

ドキュメントを参照して、SQLLite で事前に何かを構成する必要があるかどうかを確認してください。

于 2013-07-25T12:38:14.557 に答える