例如:表格"user"
包含字段id
和total
,表格purchase
包含user_id
(作为"user".id
的外键ON UPDATE CASCADE
和ON DELETE CASCADE
)和cost
。
我想对total
中的任何更改自动更新purchase
(因此total
将始终等于给定用户的所有购买总和)。我通过行触发AFTER INSERT OR UPDATE OR DELETE ON purchase
来做。从技术上讲,purchase.user_id
可能会发生变化,有两种情况:
"user".id
从一个用户更改为另一个用户造成的。在这种情况下,我减少旧用户的total
并为新用户增加它。id
中的"user"
(以及ON UPDATE CASCADE
更改user_id
中相应的purchase
)引起的。在这种情况下,我不应该通过自己的触发器做任何事情。如何在触发器中捕获第二个案例?关于在purchase
中删除"user"
中的删除问题,存在类似的问题。
答案 0 :(得分:1)
对于级联DELETE
的情况,无所事事;来自UPDATE
的触发器的purchase
只会执行任何操作,因为"user"
中的匹配行不再存在。
要处理UPDATE
"user".id
,您可以创建一个将BEFORE UPDATE ON "user"
设置为0的触发器NEW.total
。然后在purchase
上的触发器运行后,该值将与之前相同。