我有一个数据库密集型应用程序,需要每隔几个小时运行一次。有没有办法检测自上次运行该应用程序以来某个表是否发生了变化?MySQL:检测数据库更改
回答
您可以在要追踪的表上设置触发器,以便将其添加到插入的日志表中?如果这可行,您只需在每次运行中阅读日志表。
这些触发器是否可用于MySQL?你知道我在哪里可以读到他们吗? – averageman
使用时间戳。根据您的需要,您可以将其设置为在新行上更新,或者更改为现有行。去这里看看参考:
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
几个问题:
- 哪个操作系统是你的工作吗?
- 您正在使用哪种存储引擎?
虽然命令[http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html](SHOW TABLE STATUS)可以根据存储引擎显示一些信息。
这也取决于密集操作的运行间隔有多大。
我相信最精确的方法是使用触发器(AFTER INSERT/UPDATE)作为@Neuticle提到的,只是将CURRENT_TIMESTAMP存储在表名旁边。
CREATE TABLE table_versions(
table_name VARCHAR(50) NOT NULL PRIMARY KEY,
version TIMESTAMP NOT NULL
);
CREATE TRIGGER table_1_version_insert AFTER INSERT
ON table_1
FOR EACH ROW
BEGIN
REPLACE INTO table_versions VALUES('table_1', CURRENT_TIMESTAMP);
END
检测改变运行之间的一个餐桌上常见的方法是使用这样的查询:
SELECT COUNT(*),MAX(t) FROM table;
但对于这个工作,一些假设必须是真实的餐桌:
- 的
t
列有一个缺省值NOW() - 存在对UPDATE运行,并始终触发设置
t
列NOW()。然后
表中所做的任何正常变化会导致上述查询的输出改变:
有一些竞争条件,可以使这种检查在某些情况下无法正常工作。
检测变化的最有效方法是这样的。
CHECKSUM TABLE tableName
已经使用了CHECKSUM TABLE表名并且工作得非常出色。
我从AJAX请求调用它来检查表更新。如果发现更改,则执行屏幕刷新。
对于数据库“myMVC”和表“detail”,它返回一行,其中字段“table”和“Checksum”分别设置为“mymvc.detail”和“521719307”。
- 1. 数据库更改检测
- 2. 使用Oracle数据库更改通知检测更改
- 3. 一次更改多个mysql数据库(SAAS数据库更改)
- 4. 检测MySQL数据库中更新的行是否发生更改
- 5. 检测mysql数据库中的变化
- 6. 检测SQL数据库改变
- 7. 检测Android活动数据更改
- 8. 检测流数据中的更改
- 9. 检测数据库查询更新
- 10. Django-South没有检测到数据库更改
- 11. 的EntityFramework - 检测数据库方案在生产手动更改
- 12. 在SQLite数据库中检测加载器的更改
- 13. Asp.Net Signal R - 检测数据库中的更改? Asp.net Web窗体
- 14. 检测数据库条目中的更改
- 15. SQL检测数据库中存储的日志中的更改
- 16. 在Sql Server中检测数据库内容更改
- 17. 快速RPM数据库测试更改
- 18. xmlHttpRequest检查mysql数据库中的更改
- 19. 使用PHP来检查MySQL数据库更改
- 20. Android服务mysql - 检查数据库更改
- 21. 从MySQL数据库检索时的更改日期
- 22. 如何检查mysql数据库更改而不刷新?
- 23. MySQL数据库更改跟踪
- 24. 动态更改mySql数据库表
- 25. 更改mysql数据库的位置
- 26. MySQL的:数据库中更改
- 27. 追溯更改MySQL数据库
- 28. 收听MySQL中的数据库更改
- 29. MySQL更改数据库排序
- 30. 跟踪MySQL数据库更改
你有没有可以用作触发器的'DATETIME'列? – tadman