有没有办法将某种侦听器附加到 mysql 中的表以监视更改?我尝试搜索此内容,但没有找到任何内容。我想这样做来创建一个具有实时更新的用户界面。
答案1
show table status like 'tablename'
将显示有关表格最后更新时间的详细信息。
另外,如果您的表具有递增主键(auto_increment、timestamp 等),那么 HANDLER 接口可用于跟踪插入表中的新行 - 阻塞直到新数据到达。
http://dev.mysql.com/doc/refman/5.0/en/handler.html
正如其他答案中提到的,向表中添加触发器可能是最灵活的解决方案。您的触发器可以更新记录更改的审计表,然后您的应用可以轮询审计表以反映任何更改。
答案2
有几种方法可以实现这一点,但我的猜测是在应用程序代码中而不是在数据库中执行此操作会更好。
如果您确实想在数据库中执行此操作,则有几个选项,MySQL 代理和 MySQL 触发器。我不确定 MySQL 触发器除了执行 SQL 之外还能做什么,但这可能就足够了,您可以使用它们创建一个“更新”表并定期轮询它。如果您不想这样做,您可能可以用 Lua 编写一个 MySQL 代理脚本来做您需要做的事情,尽管这可能会困难得多。
MySQL 手册处理触发器: http://dev.mysql.com/doc/refman/5.0/en/triggers.html
MySQL Proxy 简介: http://dev.mysql.com/tech-resources/articles/proxy-gettingstarted.html
答案3
表中的 timestamp_inserted 列有帮助吗?
如果新列 timestamp_inserted 默认为 NOW(),则添加该列后代码更改可能不会太严重。我认为在 MySQL 中,您不必在 INSERT 时指定具有默认值的列。
使用 Andrew 提到的触发器,您可以处理更多事件,例如更新或删除。
答案4
如果您了解 C++,则可以使用 MySQL Replication Listener 库来执行变更数据捕获: https://launchpad.net/mysql-replication-listener