如何使用触发器只是在上次编辑表时更新表?我知道通过使用触发器它是“为每一行”,但如果有人插入多行,它将一遍又一遍地毫无意义地插入或改变表。如果不一遍又一遍地做到这一点,有没有办法做到这一点?
我希望能够让它为所有插件执行一次,而不是一次又一次地完成。如果不是,我想我可以通过包装器强制它。
编辑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,因为它永远不会改变。
答案 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秒对服务器进行一次调用,所以它不会过多地破坏服务器而应该只在后台静默运行。
如果确实按计划的任务根目录进行操作,最好在脚本中添加错误捕获,以便在出现问题时通过电子邮件收到警报等。