我有一张名为' player_instance'然后是一个名为“惩罚”的表格。 (具有引用player_instance的外键)。我还有一张名为'得分的表。
我在惩罚上有一个DELETE TRIGGER,这样如果一行被删除,那么它将改变分数中的一列。我知道这有效 - 当删除惩罚时,它将减少分数列。
我还有一个ON DELETE CASCADE,如果删除了player_instance,那么所有相关的惩罚也将被删除。我知道这也有效。
但是当player_instance被删除时,它只会删除相关的惩罚而不会触发改变分数的触发器。任何人都可以帮助我理解为什么这不起作用?
非常感谢
答案 0 :(得分:4)
'触发器不会被外键操作激活。'
http://dev.mysql.com/doc/refman/5.5/en/stored-program-restrictions.html
唉唉!
任何人都可以帮我解决问题吗?
答案 1 :(得分:0)
有关解决方法,请按照以下步骤操作
在外键引用中删除(ON DELETE CASCADE
)
替换(ON DELETE CASCADE
)添加此触发器
CREATE TRIGGER DELETE_CHILD_ROW BEFORE DELETE ON PARANT_TABLE
FOR EACH ROW
BEGIN
DELETE FROM CHILD_TABLE WHERE PARANT_ID=OLD.PARANT_ID;
END;
答案 2 :(得分:0)
是的,有。设置级联删除以设置空值,并在第一级触发器中使用空键删除记录。那应该触发删除触发器。我刚刚遇到了这个问题,现在正在测试。