在「cmdev」资料中有一个「emplog」表格,如果有人执行任何修改「cmdev.emp」表格资料的动作,都要新增一笔讯息到「cmdev.emplog」表格中,查询这个表格的资料,就可以知道在什么时候曾经修改过「cmdev.emp」表格中的资料:
栏位名称 | 型态 | NULL | 索引 | 预设值 | 其它资讯 | 说明 |
logno | bigint(20) | NO | PRI | NULL | auto_increment | 纪录编号 |
logdt | timestamp | NO | CURRENT_TIMESTAMP | 日期时间 | ||
message | varchar(64) | YES | NULL | 讯息 |
要完成这样的需求,每一次修改「cmdev.emp」表格资料时,你都必需执行下列的工作:
要完成这样的需求,你可以使用stored routines来处理修改与新增纪录的工作,或是在应用程式中撰写程式来解决。不过都会是一件很麻烦的事情,而且比较容易造成遗漏纪录的情况。
MySQL资料库提供一种特别的资料库元件,称为「triggers」,一般会把它称为「触发器」。Triggers可以让你先把一些在特定状况要执行的叙述储存起来,MySQL资料库会在正确的时机自动帮你执行这些叙述:
以上列讨论的需求来说,每一次修改「cmdev.emp」表格资料,都必须新增一笔纪录到「cmdev.emplog」表格中。这个需求的主角是「cmdev.emp」表格,所以你可以为这个表格建立一个trigger元件;因为是在修改资料的情况时才需要执行特定的工作,所以你要选择「UPDATE trigger」;新增一笔纪录到「cmdev.emplog」表格中的叙述就是储存在「cmdev.emp」表格的「UPDATE trigger」中。
如果你建立好需要的trigger元件后,MySQL资料库就会自动帮你执行这些工作: