关于删除级联奇怪的行为

时间:2014-08-26 02:27:34

标签: sql azure-sql-database

我在Azure SQL中使用可视化编辑器尝试过这种方法,而SQL并不是我最强大的技能。

带2个表的简单数据库。

Table Person with just id.
Table Hating with id, hater, target.

Hating.haterHating.target都是必需的,都是Person.id的外键 并且都有ON DELETE CASCADE。

因此,人与人之间基本上是多对多的关系,如果删除了发起者或目标,则有意删除该关系。

但是,如果两个外键都是级联的,那么这将不起作用。如果只是其他的,那就可以正常工作,但如果两者都是,那就不行。

这是SQL中的一些限制吗?有没有办法完成我想要做的事情?

1 个答案:

答案 0 :(得分:1)

同一个表中不能有2个级联键。但是,你可以让一个触发器为你工作。因此,不要使用两个级联键,而是在人员表中添加一个触发器(未经测试,但这里有想法):

    CREATE TRIGGER T_PERSON_CASCADE ON Person FOR DELETE AS

    DELETE FROM Hating WHERE hater IN (SELECT id FROM deleted) OR target IN (SELECT id FROM deleted)

    END