2

私は2つのテーブルを持っています:

リクエスト-Request_id、Request_Message; //リクエストが含まれています

応答-Response_id、Request_id、Response_Message; //リクエストの応答が含まれます。Request_idはこのテーブルの外部キーです

ここで、Request_id = "REQ001"; .. ..のリクエストからクエリ削除を実行している間、応答テーブルに対応する応答がない場合、クエリは正常に機能していますが、外部キー制約エラーが発生します。

リクエストテーブルからリクエストを削除するときに、対応するすべてのレスポンスをレスポンステーブルから自動的に削除する必要があります。これを実現するには??

御時間ありがとうございます..

Devesh

4

5 に答える 5

2

削除時にカスケードを使用してみてください。

create table Responses(
...
CONSTRAINT fk_column
  FOREIGN KEY (Request_id)
  REFERENCES Requests (Request_id)
  ON DELETE CASCADE
);
于 2012-05-28T13:40:11.203 に答える
1

子テーブル(外部キーを持つ)構造を定義するときにカスケード削除を使用します。

CREATE TABLE `Responses ` 
  ( 
     `Request_id` INT(10), 
     INDEX (Request_id), 
     FOREIGN KEY (Request_id) REFERENCES Requests (Request_id) ON DELETE CASCADE 
  ) 

InnoDBストレージエンジンを使用する必要があることを覚えておいてください。デフォルトのMyISAMストレージエンジンは外部キーをサポートしていません。

于 2012-05-28T13:41:41.420 に答える
1

CASCADE制約の定義で使用することFOREIGN KEYはオプションです。ただし、deleteステートメントの複数テーブル構文を使用することをお勧めします。例:

DELETE FROM Requests, Responses
USING Requests
LEFT JOIN Responses ON Requests.Request_id=Responses.Request_id
WHERE Requests.Request_id='REQ001';

これは、実際に何が起こるかをより明確にするため、私の推奨するソリューションです。

于 2012-05-28T13:42:40.023 に答える
0

Responses削除するレコードを最初にすべて削除するかRequest_id、外部キーをとして定義する必要がありますON DELETE CASCADE

于 2012-05-28T13:38:27.173 に答える
0

FOREIGN KEY制約についてのMySQLマニュアルで説明されているように、アプリケーションの代わりにデータベースにこれを処理させたい場合は、 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.htmlCONSTRAINT 、次のようなものに変更する必要があります。

CONSTRAINT my_constraint FOREIGN KEY request_id (request_id) REFERENCES Requests (request_id) ON DELETE CASCADE;

ON DELETE CASCADEパーツは、テーブルResponsesrequest_id削除されるレコードと同じ値に設定されているRequestsテーブル内のレコードと削除を処理します。

于 2012-05-28T13:40:34.850 に答える