gpt4 book ai didi

用于维护修改历史记录的 SQL 触发器

转载 作者:行者123 更新时间:2023-12-02 02:22:05 29 4
gpt4 key购买 nike

我有三个表:

Table1: Customers (CustomerId, Name, CustomerAddress)
Table2: AccountManagers(ManagerId, Name)
Table3: CustomerAccountManagers (CustomerId, ManagerId, Remarks)
Table4: CustomerHistory(CustomerAddress, ManagerId, Date)

CustomerHistory 表用于存储对“CustomerAddress”或“ManagerId”所做的任何更改,例如 CustomerAddress 从“Address1”更新为“Address2”或 CustomerAccountManager 从“Manager1”更改为“Manager2”。

我需要通过 SQL 触发器将更改存储在 CustomerHistory 表中。问题是我应该在哪张 table 上放触发器?请注意,同时对表“Customers”和“CustomerAccountManagers”进行了更改。

谢谢

最佳答案

首先,CustomerHistory 表应该也包含CustomerId,这样历史记录就可以追溯到正确的客户。

您需要两个触发器:一个在 CustomerAccountManagers 上,一个在 Customers 上。如果您可以保证它们的执行顺序,那就没问题:第一个触发器将插入,第二个触发器更新历史记录。

如果您不能保证顺序,事情就会变得复杂,因为每个触发器都必须:1) 尝试插入新记录,如果失败 2) 更新现有记录。您必须保护自己免受另一个触发器的间歇性插入的影响,这可能意味着在具有可序列化隔离级别(锁定整个表)的事务中运行。这很容易发生死锁,所以使用两个历史表确实更好,正如其他人已经建议的那样。

关于用于维护修改历史记录的 SQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657618/

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