如何防止不同表上的两个触发器同时触发?
How do you prevent two triggers on separate tables from both firing at the same time?
我有一个名为 ClientInfo 的 table 用于存储客户的个人信息,另一个 table 名为 EmergencyContactInfo 用于存储他们的紧急联系信息。现在我的 ClientInfo table 上有一个更新触发器,如果他们的任何个人信息发生变化,它会将一条记录插入第三个 table 称为 ClientLog 中。如果客户的紧急联系信息发生变化,我还想创建一条 ClientLog 记录。
问题是用户可以从我的网页中通过一次保存更改客户的个人信息和他们的紧急联系信息。如果我在我的 EmergencyContact table 上放置一个更新触发器,那么我的两个触发器都会触发,而 ClientLog table 将插入两条新记录,而我只需要一条记录。
据我了解,不存在跨越多个 table 的更新触发器。当客户的个人信息和他们的紧急联系信息都发生变化时,我可以采用什么替代方法来插入一条记录?
您的理解是正确的,一个触发器不能跨越多个 tables。
也没有阻止触发器触发的东西。
您可以做的是在您的触发器中包含逻辑,以防止它在某些条件为真时执行任何操作。
现在我不知道你在日志中写了什么 table,以及你想要执行什么逻辑,但是一个例子是,当触发器触发时,如果已经有一个同一客户端在过去 x 小时内的日志条目(日志 Table 中的行),然后不要在日志 table.
中插入新行
您甚至可以使用 OUTER JOIN
到日志 table 或 WHERE NOT EXISTS()
子句来处理多行 insert/updates。
但基本上我要说的是,让两个触发器都触发,并且在两个触发器中,在写入日志 Table 之前检查某些条件是否为 true/false。否则什么也不做。
你让这件事变得不必要的困难和容易出错。
如果每个数据 table 都有一个单独的日志 table 并且它自己的触发器,您可以忽略整个问题,让它们按预期工作。
如果要一起查看日志信息,可以在显示数据时对两个table使用JOIN。
我有一个名为 ClientInfo 的 table 用于存储客户的个人信息,另一个 table 名为 EmergencyContactInfo 用于存储他们的紧急联系信息。现在我的 ClientInfo table 上有一个更新触发器,如果他们的任何个人信息发生变化,它会将一条记录插入第三个 table 称为 ClientLog 中。如果客户的紧急联系信息发生变化,我还想创建一条 ClientLog 记录。
问题是用户可以从我的网页中通过一次保存更改客户的个人信息和他们的紧急联系信息。如果我在我的 EmergencyContact table 上放置一个更新触发器,那么我的两个触发器都会触发,而 ClientLog table 将插入两条新记录,而我只需要一条记录。
据我了解,不存在跨越多个 table 的更新触发器。当客户的个人信息和他们的紧急联系信息都发生变化时,我可以采用什么替代方法来插入一条记录?
您的理解是正确的,一个触发器不能跨越多个 tables。
也没有阻止触发器触发的东西。
您可以做的是在您的触发器中包含逻辑,以防止它在某些条件为真时执行任何操作。
现在我不知道你在日志中写了什么 table,以及你想要执行什么逻辑,但是一个例子是,当触发器触发时,如果已经有一个同一客户端在过去 x 小时内的日志条目(日志 Table 中的行),然后不要在日志 table.
中插入新行您甚至可以使用 OUTER JOIN
到日志 table 或 WHERE NOT EXISTS()
子句来处理多行 insert/updates。
但基本上我要说的是,让两个触发器都触发,并且在两个触发器中,在写入日志 Table 之前检查某些条件是否为 true/false。否则什么也不做。
你让这件事变得不必要的困难和容易出错。
如果每个数据 table 都有一个单独的日志 table 并且它自己的触发器,您可以忽略整个问题,让它们按预期工作。
如果要一起查看日志信息,可以在显示数据时对两个table使用JOIN。