如何知道何时将新记录添加到数据库

时间:2011-04-01 11:33:31

标签: c# mysql sql-server database

我有两个不同应用程序使用的数据库。 Application1将执行数据库中的所有操作。我们无法控制此应用程序

当从表中添加,修改或删除记录时,需要提醒Application2。 但我们不能在sql中编写一些触发器。

示例:有一个计费软件,它将账单添加到账单表中,客户表中的相应记录将使用从账单中获得的新点进行更新。 现在我们有了一个不同的分析软件,它从customers表中检索数据并动态地向它们发放一些凭证。我不能经常循环或查询数据库,除非它是唯一剩下的选项。

我还想知道数据库引擎中是否有功能。

请提出任何建议..

5 个答案:

答案 0 :(得分:5)

您可以查看following article

答案 1 :(得分:3)

App1在数据库操作之前/之后向App2发送消息。

答案 2 :(得分:0)

您能否给我们一些背景信息,例如应用程序是什么,更改是什么等?它只是被禁止的触发器吗? (这是为什么?)。

您可能会在循环中轮询数据库,检查SELECT MAX(id) FROM table以查看ID是否大于上次(即有新内容)。没有触发器,您无法看到修改或删除,除非您编写了App1并且可以同时写入审计表,记录所有操作。

答案 3 :(得分:0)

“但我们不能在sql中编写一些触发器。”

这是唯一可行的方法,如果您希望系统可靠,并且您希望系统始终向其用户提供正确的信息(如果有可能的话,请进一步查看) )。

有人回答“App1向App2发送一条消息”,该评论的评论是“不符合ACID”。这句话是正确的(给出了对'ACID'一词的一些合理解释)。关键是,你的app2只想接收插入通知,在绝对确定插件确实发生的位置。只有当 DBMS 成功提交这样的插入时,才能确定这一点。

因此,您需要的触发器是一种在成功提交后运行的触发器(存在这些触发器吗?)。

然后问题变成了,如果提交触发器因任何原因失败,应该怎么做?您的数据已提交,您的app1认为一切正常,但您的app2仍未收到应该收到的通知。

这个问题的解决方案是你的app1,你的DBMS和你的app2都准备参与两阶段提交。我毫不怀疑,既然你“无法对app1做任何事情”,那么你也不可能让它参与2PC。

“数据库监听器”模式简单明了,设计有缺陷。至少如果你珍惜“绝对一致性”。

答案 4 :(得分:0)

您可以通过以下链接中提供的建议跟踪这些更改:

https://msdn.microsoft.com/en-us/library/bb933994.aspx

https://msdn.microsoft.com/en-us/library/cc305322(v=sql.110).aspx

或尝试使用以下内容在Google中进行切换: 谁来跟踪更改数据库mssql