2012-03-02 44 views
3

我正在使用mysql 5.1.41-3ubuntu12.10,想知道我的表是最后一次ALTERed(或CREATEd,如果它从未更改过)。我的桌子最后一次变更了什么时候?

SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = SCHEMA();
给出CREATE和上次UPDATE时间,但不是AFAICT最后一次ALTER时间。

回答

6

答案在某种程度上取决于存储引擎。表最后更改时间的最可靠指示器是查看数据目录中.frm文件上的修改时间。每次更改表时都应该更新该文件,即使是更新不需要表重建等列更改的更改也是如此。

information_schema.tables.create_time有点用词不当,因为当您更改表格时,该值实际上会改变大部分时间。但是,这是存储引擎相关的一个领域。如果在InnoDB中没有重建(如更改列默认值)的情况下进行更改,则会更新information_schema.tables.create_time,但如果在MyISAM中执行相同操作information_schema.tables.create_time不会更新。在这两种情况下,.frm文件都应该更新,所以我建议您检查文件时间戳以获取最准确的数据(如果有权访问它)。

+0

+1,谢谢! – msh210 2012-03-02 18:51:07

+0

+1提出了这个重要的区别。我使用InnoDB,所以我猜'information_schema.tables.create_time'每当表更改时都会更新。除了在文件系统中查找'.ibd'或'.opt'文件的创建时间,我无法找到表的真正Create_Time。这似乎应该被视为一个错误,不是吗? – philtune 2016-04-26 14:03:06

+0

挖掘我的数据库表,我发现'mysql.innodb_table_stats.last_update'似乎显示创建时间,而不是最后完成的更新。非常愚蠢,特别是因为'information_schema.tables.create_time'似乎显示最后一次UPDATE而不是CREATE时间。嗯。 – philtune 2016-04-26 15:35:25

相关问题