级联删除不触发触发器

时间:2014-11-09 19:41:15

标签: mysql postgresql

我转移到postgresql的原因之一是(与mysql不同)外键操作(例如级联删除)可以触发触发器。

在我的数据库中,我有表格' penalty_kicks'外键引用' player_instance':

ALTER TABLE penalty_kicks ADD FOREIGN KEY (kicker_id) REFERENCES player_instance (id) ON DELETE CASCADE;

我知道这就像删除player_instance一样,删除了penalty_kicks的每个关联行。

我还有一个触发器功能,如果删除了penalty_kicks的一行,那么它将改变一行得分':

CREATE TRIGGER delete_penalty_kicks AFTER DELETE ON penalty_kicks FOR EACH ROW EXECUTE PROCEDURE delete_kicks();

CREATE FUNCTION delete_kicks()
RETURNS trigger AS $temp$
BEGIN

    UPDATE scores s
    SET    points = points -3
    FROM   player_instance pi
    WHERE  pi.id = OLD.kicker_id
    AND    s.match_id = pi.match_id 
    AND    s.team_id  = pi.team_id 
    AND    OLD.success;         
RETURN NULL;         

END;
$temp$
LANGUAGE 'plpgsql';

(非常感谢上面的其他用户)

我知道这就像当我为penalty_kicks删除一行时,它会对得分执行正确的操作。

然而,当我删除一个player_instance时,它只会删除penalty_kick(通过级联)而不会触发触发器以改变分数。

有什么想法吗?

由于

0 个答案:

没有答案