1. ホーム
  2. sql

[解決済み] DELETE文の競合REFERENCE制約

2022-01-29 03:06:51

質問内容

エラーが発生する

DELETE 文は REFERENCE 制約と競合しています。 FK_DocYDocument1 - テーブルDocYDocument、列SubDocID - ステートメント。 DELETE FROM DOCUMENT WHERE (ID=?) Parameter: 'D7FAA3CF...'.

テーブル DocYDocument にはカラムがあります。

PK ID, FK DocID and FK SubDocID. 
And the keys PK_DocYDocument, FK_DocYDocument and FK_DocYDocument1.

FK_DocYDocument1 の外部キーカラムは SubDocID で、FK_DocYDocument の外部キーカラムは DocID です。

データベースの設計に問題があるのでしょうか、それともプログラムのエラーを探さなければならないのでしょうか?

どのように解決するのですか?

の行があります。 DocYDocument を参照している DOCUMENT を削除してください。

から行を削除する必要があります。 DocYDocument と一致する DocID

DELETE FROM DocYDocument WHERE DocID = ?
DELETE FROM DOCUMENT WHERE ID = ?

または、これを自動的に行うように制約を変更する

ALTER TABLE DocYDocument
  DROP CONTRAINT FK_DocYDocument;
ALTER TABLE DocYDocument
  ADD CONSTRAINT FK_DocYDocument
    FOREIGN KEY ( DocID )
    REFERENCES DOCUMENT ( ID )
    ON DELETE CASCADE;

もし DocID がヌルである場合、代わりに ON DELETE SET NULL ということです。