我转向 postgresql 的原因之一是(与 mysql 不同)外键操作(例如级联删除)可以触发触发器。
在我的数据库中,我有表“penalty_kicks”,其中外键引用“player_instance”:
ALTER TABLE penalty_kicks ADD FOREIGN KEY (kicker_id) REFERENCES player_instance (id) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)
我知道,当我删除一个player_instance时,惩罚_踢的每个关联行都会被删除。
我还有一个触发器函数,如果删除penalty_kicks 行,那么它将更改“scores”行:
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';
Run Code Online (Sandbox Code Playgroud)
(非常感谢另一位用户的上述内容)
我知道这是有效的,因为当我删除penalty_kicks 的行时,它将在得分上执行正确的操作。
但是,当我删除player_instance时,它只会删除penalty_kick(通过级联),而不会触发触发器来改变分数。
有任何想法吗?
谢谢
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |