mysql表状态未更改

时间:2012-12-18 08:48:29

标签: php mysql cakephp

我正在开发一个项目,我需要使用cakephp和jQuery添加comet ajax。

因为我正在使用this tutorial

我已经成功实现了它,但现在我想用mysql表修改时间替换文本文件修改时间。

我使用了SHOW TABLE STATUS mysql查询,我得到了mysql表更新时间,但我不知道为什么不知何故表Update_time如果我添加,修改或删除记录都没有得到更新。

现在请建议我是否可以使用php代码更新该表详细信息,或者是否有其他更好的方法来实现此目的。

感谢。

1 个答案:

答案 0 :(得分:1)

正如SHOW TABLE STATUS Syntax所述:

  
      
  • Update_time

         

    上次更新数据文件时。对于某些存储引擎,此值为NULL。例如,InnoDB在其system tablespace中存储多个表,并且数据文件时间戳不适用。即使在file-per-table模式下,每个InnoDB表位于单独的.ibd文件中,change buffering也可以延迟写入数据文件,因此文件修改时间与时间不同最后一次插入,更新或删除。对于MyISAM,使用数据文件时间戳;但是,在Windows上,更新不会更新时间戳,因此值不准确。

  •   

相反,您可以创建triggers,以便在修改表时使用当前时间戳更新单独的表:

CREATE TABLE log (
  table_name VARCHAR(64) NOT NULL,
  lastmodified TIMESTAMP NOT NULL,
  PRIMARY KEY (table_name)
);

CREATE TRIGGER foo_ins AFTER INSERT ON my_table FOR EACH ROW
INSERT INTO log (table_name, lastmodified) VALUES ('my_table', NOW())
ON DUPLICATE KEY UPDATE lastmodified = NOW();

CREATE TRIGGER foo_ins AFTER UPDATE ON my_table FOR EACH ROW
INSERT INTO log (table_name, lastmodified) VALUES ('my_table', NOW())
ON DUPLICATE KEY UPDATE lastmodified = NOW();

CREATE TRIGGER foo_ins AFTER DELETE ON my_table FOR EACH ROW
INSERT INTO log (table_name, lastmodified) VALUES ('my_table', NOW())
ON DUPLICATE KEY UPDATE lastmodified = NOW();