gpt4 book ai didi

database - 如何捕获触发 Postgres PL/PGSQL 中外键完整性引起的变化?

转载 作者:搜寻专家 更新时间:2023-10-30 20:35:56 25 4
gpt4 key购买 nike

例如:表“用户”有字段idtotal,表purchaseuser_id(作为 "user".id 的外键,使用 ON UPDATE CASCADEON DELETE CASCADE)和 成本

我想根据 purchase 的任何变化自动更新 total(因此 total 将始终等于所有购买的总和对于给定的用户)。我通过行触发器 AFTER INSERT OR UPDATE OR DELETE ON purchase 来完成。从技术上讲,purchase.user_id 是有可能被改变的,有两种情况:

  1. 此更改是由于将 "user".id 从一个用户更改为另一个用户引起的。在本例中,我为老用户减少了 total,为新用户增加了它。
  2. 此更改是由于更改表 “用户” 中的 id(并且 ON UPDATE CASCADE 更改相应的 user_ids in purchase)。在这种情况下,我应该什么都不做。

如何在触发器中捕获第二个案例?关于捕获 purchase 中由 "user" 中的删除引起的删除有类似的问题。

最佳答案

对于级联 DELETE 的情况,无事可做; purchase 触发器中的 UPDATE 不会执行任何操作,因为 “user” 中的匹配行已不存在。

要处理 "user".idUPDATE,您可以创建触发器 BEFORE UPDATE ON "user" 设置 NEW.total 为 0。然后在 purchase 触发器运行后,该值将与之前相同。

关于database - 如何捕获触发 Postgres PL/PGSQL 中外键完整性引起的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39369371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com