我有两张桌子:
请求 - Request_id,Request_Message; //包含请求
响应 - Response_id,Request_id,Response_Message; //包含请求的响应.. Request_id是此表的外键
现在我正在运行查询从请求中删除Request_id =" REQ001&#34 ;; .. ..如果响应表中没有相应的响应,那么查询工作正常,其他给出外键约束错误。
我希望当我从请求表中删除任何请求时,所有相应的响应必须自动从响应表中删除..如何实现这一点?
谢谢你的时间..
Devesh
答案 0 :(得分:2)
尝试在删除时使用级联:
create table Responses(
...
CONSTRAINT fk_column
FOREIGN KEY (Request_id)
REFERENCES Requests (Request_id)
ON DELETE CASCADE
);
答案 1 :(得分:1)
在定义子表(具有外键)结构时使用Cascade Delete。
CREATE TABLE `Responses `
(
`Request_id` INT(10),
INDEX (Request_id),
FOREIGN KEY (Request_id) REFERENCES Requests (Request_id) ON DELETE CASCADE
)
请记住,您需要使用InnoDB存储引擎:默认的MyISAM存储引擎不支持外键。
答案 2 :(得分: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';
这是我首选的解决方案,因为它更加明确了实际发生的事情。
答案 3 :(得分:0)
您需要首先删除引用您要删除的Responses
的所有Request_id
条记录,或者您需要将外键定义为ON DELETE CASCADE
。
答案 4 :(得分:0)
如FOREIGN KEY
约束的MySQL手册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
部分将负责删除Responses
表中的request_id
表,其Requests
设置为与{{1}}中删除的记录相同的值表