Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

MySQL触发器记录表的最后操作时间

  虽然MyISAM引擎可以直接在information_schema库的tables表中查询到表的操作时间。但是它有缓存问题,我们总是无法获取到最新的时间,或者说每次获取有效时间都需要做一次清除表缓存的操作而浪费资源。所以我使用了触发器来记录表的最后操作时间。
  首先需要建一个新的表,用来储存我们需要记录的表名和时间。然后对要记录的表添加三个触发器,分别在“insert”、“update”、“delete”这三个操作执行后把当前时间记录到我们刚创建的表中。下面是例子,我要记录最后操作时间的表名叫tab1。
#创建存放记录的表
drop table if exists `lastmodified`;
create table `lastmodified`(
  `tablename` varchar(32) primary key,
  `modifytime` timestamp
);
#添加一条记录
insert into `lastmodified`(`tablename`) values('tab1');
#为需要记录的表创建insert触发器
drop trigger if exists `tab1_insert_lm`;
create trigger `tab1_insert_lm`
  after insert on `tab1` for each row
  update `lastmodified`
    set `modifytime`=now()
    where `tablename`='tab1';
#为需要记录的表创建update触发器
drop trigger if exists `tab1_update_lm`;
create trigger `tab1_update_lm`
  after update on `tab1` for each row
  update `lastmodified`
    set `modifytime`=now()
    where `tablename`='tab1';
#为需要记录的表创建insert触发器
drop trigger if exists `tab1_delete_lm`;
create trigger `tab1_delete_lm`
  after delete on `tab1` for each row
  update `lastmodified`
    set `modifytime`=now()
    where `tablename`='tab1';
  执行了这些以后,这样只要对tab1这个表做任何数据操作都可以在lastmodified这个表中找到它的的最后操作时间。不过使用了这么多的触发器当然也会带来一些性能上的损耗了。如果数据表本身写入操作不频繁,那就非常适合使用这个方法。对于写入操作频繁的表就应该另辟新径了。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^