使用MySQL触发器使用last_modified数据更新表

时间:2012-02-13 01:22:09

标签: mysql triggers innodb

如何使用触发器只是在上次编辑表时更新表?我知道通过使用触发器它是“为每一行”,但如果有人插入多行,它将一遍又一遍地毫无意义地插入或改变表。如果不一遍又一遍地做到这一点,有没有办法做到这一点?

我希望能够让它为所有插件执行一次,而不是一次又一次地完成。如果不是,我想我可以通过包装器强制它。

编辑1: 那么我想要解释更多的设计。

我将在另一个数据库中拥有一个表来处理诸如聊天或玩家“邮箱”之类的事情的last_updated数据,另一个用于处理诸如任务,技能,项目等表格之类的事情。我希望能够知道上次更新表的时间,以便在我扫描表格以查找新内容之前可以轻松查看。

基本上这就是我想做的事情(或者类似的事情),我也使用PHP,所以它很可能是代码中基于PHP的方法,但SQL应该是标准的。我不会做完整的代码,而是半可运行的。

last_modified=mysql_query("select last_modified from various_stats.table_last_updated where database_name=`database_name` and `table_name`");
if(last_modified>last_checked_time){
        data_to_get_updated=mysql_query("select something from various_<something>.table_name where last_modified>last_checked_time");
}
else{
     do_nothing;
}

编辑2:我正在使用InnoDB,因此我不能使用信息模式的update_time,因为它永远不会改变。

1 个答案:

答案 0 :(得分:0)

如果我在正确的轨道上,这将对您有所帮助:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'dbname'
AND TABLE_NAME = 'tabname'

以上解决方案适用于myisam,对于innodb,规范是设置一个已设置的脚本,这可以设置为cron作业或Windows预定任务,如果你没有对你的web主机进行那种控制,你可以可能在你的办公室里设置一个小服务器并从那里运行cron。如果你每20秒做一次,你可以简单地记录当前自动增加的最高ID并将其用作guid,如果当前ID高于最后记录的ID,则更新你的记录以显示最后更改的时间。

因为这只是每隔XX秒对服务器进行一次调用,所以它不会过多地破坏服务器而应该只在后台静默运行。

如果确实按计划的任务根目录进行操作,最好在脚本中添加错误捕获,以便在出现问题时通过电子邮件收到警报等。