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

如何确定InnoDB表的上次更改时间?

如何解决《如何确定InnoDB表的上次更改时间?》经验,为你挑选了2个好方法。

我在过去成功地将数据库查询的(重度)处理结果存储在memcached中,使用基础表的最后更新时间作为缓存键的一部分.对于MyISAM表,可以使用上次更改的时间SHOW TABLE STATUS.不幸的是,InnoDB表通常为NULL.

在MySQL 4.1中,InnoDB的ctime SHOW TABLE STATUS通常是它的实际上次更新时间,但对于MySQL 5.1来说似乎并非如此.

表中有一个DATETIME字段,但它只显示修改行的时间 - 它不能显示不再存在的行的删除时间!所以,我真的不能用MAX(update_time).

这是非常棘手的部分.我有许多复制品,我从中读取.我可以找出实际应用更改时不依赖的表的状态吗?

经过一段时间的研究后,我得出的结论是,不可能像我想的那样便宜地得到这些信息.我可能会将数据缓存,直到我希望表更改(它每天更新一次)为止,并让查询缓存帮助它.



1> titel..:

如果您对数据库更改时并不感兴趣,但想知道是否更改了一个数据库表,那么您应该查看MySQL CHECKSUM TABLE

希望这可以帮助.



2> derobert..:

这是MySQL的错误14374,15438,和底层InnoDB的错误2681.

我有两个建议(除了修补MySQL).

    如果每个文件使用一个表(innodb_file_per_table),请对基础文件进行统计.您可以编写MySQL函数/扩展来执行此操作.由于数据库缓存,这可能会略有滞后.

    您可以在更新,删除和插入触发器后使用,以使您自己的元数据表与您关注的每个表的最后更新时间保持一致.

我个人建议第二个,因为它更易于移植,并且不依赖于实现细节(例如innodb_file_per_table).


请记住,如果关于InnoDB的第2条路线触发:"注意目前,级联外键操作不会激活触发器." (摘自[13.2.2.5.FOREIGN KEY Constraints](http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html))
推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有