27

2つのテーブルを設定しました。

CREATE TABLE A
(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name TEXT
 );

CREATE TABLE B
(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    id2 INTEGER,
    book TEXT,
    FOREIGN KEY(id2) REFERENCES A(id)
);

にデータを挿入するAと、次のようになります。

1    John

2    Amy

3    Peter

にデータを挿入するBと、次のようになります。

1     1     Lord of the Rings

2     1     Catch 22

3     2     Sum of All Fears

4     3     Hunt for Red October

次に、次のステートメントを実行します。

delete from a where id=1;

私は次のようになります:"Error: foreign key constraint failed"

その後、再起動sqlite3して再試行しますが、今回は最初にこれを入力します。

PRAGMA foreign_keys = 1;

それでも動作しません......

4

2 に答える 2

26

Table B外部キーが削除しようとしている行の主キー値を参照するTable A行があるため、削除するとデータベースの整合性が損なわれます。

ON DELETE CASCADE外部キー定義に含めることができます。これにより、 からエントリを削除すると、削除された行にリンクされている のエントリも削除されますTable ATable Bそれがあなたのアプリケーションに適しているかどうかはわかりません。

于 2013-03-16T16:35:35.787 に答える
11

「問題」は、テーブル B に外部キーを設定したことです。

foreign key(id2) references A(id)

これはid2、テーブル B の列idがテーブル A の列を参照することを意味します。Lord of the Ringsとfrom の両方がCatch 22fromTable BにリンクされJohnていTable Aます。Johnしたがって、これらの他の 2 つのエントリを最初から削除しないと削除できませんTable B

別の方法は、外部キーを削除することです。

詳細については、このドキュメントを参照してください。

于 2013-03-16T00:03:40.173 に答える