2

我有两张桌子:

请求 - Request_id , Request_Message;// 包含请求

响应 - Response_id 、 Request_id 、 Response_Message;// 包含请求的响应。Request_id 是该表的外键

现在,当我从请求中删除 Request_id = "REQ001"; ...

我想当我从请求表中删除任何请求时,所有相应的响应都必须从响应表中自动删除。如何实现这一点?

谢谢你的时间..

德韦什

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

如 MySQLFOREIGN KEY约束手册中所述,http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html,如果你想让数据库处理这个而不是你的应用程序,您必须将您的更改CONSTRAINT为:

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 回答