利用外键进行双边行动

时间:2015-01-16 19:04:01

标签: mysql sql foreign-keys relational-database

我在表格中使用外键:

表A

-----------------------------------------
id    |  name   |  type   | date
-----------------------------------------
1     |test.jpg |image/jpg| 2015-01-15
2     |test2.jpg|image/jpg| 2015-01-15
3     |test3.jpg|image/jpg| 2015-01-15

表B

-----------------------------------------
id    |  title  | file_id | date
-----------------------------------------
1     |News 1   |1        | 2015-01-15
2     |News 2   |2        | 2015-01-15
3     |News 3   |3        | 2015-01-15

这是表B 的外键:

CONSTRAINT `news_ibfk_1` FOREIGN KEY (`file_id`) REFERENCES `Table A` (`id`) ON UPDATE NO ACTION

现在一切正常,我想知道如果我从Table B删除file_id Table A记录删除中的一条记录,有什么办法可以说明吗?

1 个答案:

答案 0 :(得分:0)

所以我理解" TableA.id"是" TableB.file_id"的父级。

在这种情况下,你只能删除" TableA.id"没有孩子。来自" TableB.file_id"的值必须存在于" TableA.id"。

你可以做的是在" TableB"删除完成后激活。然后你可以查看值" TableB.file_id"从您删除的行仍然在" TableB.file_id"中使用。如果不是这种情况,那么删除你可以从" TableA"中删除它。

以下是有关触发器的链接:Triggers

我认为你需要在删除触发器"之后使用"。 像这样:

CREATE OR REPLACE TRIGGER trName 
AFTER DELETE ON TableB

BEGIN 
    <look if any values from "TableA.id" are not used anymore in "TableB.file_id">
    <if that is the case, do a DELETE on that "TableA.id" line>
END;
/