当前位置:  开发笔记 > 后端 > 正文

在MySQL中观看表的变化?

如何解决《在MySQL中观看表的变化?》经验,为你挑选了4个好方法。

有没有更好的方法来观察表中的新条目,除了每隔n个时间点或类似的选择?

我有一个外部程序经常更新的表,客户端可以在到达时监视这些新数据,如何在不设置固定周期的可重复选择语句的情况下进行此操作?



1> itsmatt..:

这就是我所做的:我为表设置了一些触发器(插入,删除,更新),这些触发器在另一个表中增加一个计数器.我的数据库访问代码保留一个本地计数器并将其与返回值进行比较,最终将一个bool发送回调用者,回答问题IsDataCurrent().

我们使用此数据库访问代码的程序可以根据请求进行轮询或检查,然后进行适当的调用以使自己保持最新状态.

我确信还有其他方法可以解决这个问题.不过,它对我很有用.


我不同意.查询选择计数(*)可能会产生错误的结果.如果我执行添加/删除/和添加计数将是相同的,对吧?那么数据变化了吗?在那种情况下你不会知道.最后一个更新表不会产生这种情况.

2> Vinko Vrsalo..:

在MySQL中,没有比轮询更好的方法(您创建一个特定的表来简化轮询),在其他数据库中,您可以拥有在数据库之外产生影响的触发器.在MySQL中,触发器只能在数据库本身内部执行操作(例如,填充辅助表).



3> Rob Allen..:

另一种类似的方法是添加

add column Last_Modified TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

对每个表和前面的选择查询进行比较,以将最后一个请求日期/时间与最大值(Last_Modified)进行比较.

数据库通常是拉动源而不是推送,因此无论如何,您仍然需要以编程方式探测更改.



4> scipilot..:

如果您拥有对主机的控制权,则可以触发数据库外部的行为.

A) 这个问题的答案建议使用'select into outfile'写入文件,某些系统进程会监视该文件的变化(例如基于inotify的方法,例如node-inotify甚至Grunt-watch可能就足够了)

B)对于勇敢者: 这个问题的答案指出,如果你可以在数据库服务器上安装C/C++附加组件,你可以使用用户定义函数(UDF)来调用sys_exec(),从而触发外部进程,或者可能直接在UDF中编写实际过程.

http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-11

(我正在研究这个,对于AWS RDS托管的应用程序,所以很遗憾,这些选项都不适合我.)

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有