在MySQL中,创建只有一个执行语句的触发器的基本形式如下:
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件ON 表名 FOR EACH ROW 执行语句
具体的参数说明如下:
触发器名:指定要创建的触发器名字。
参数BEFORE和AFTER:指定触发器执行的时间。BEFORE指在触发时间之前执行触发语句;AFTER表示在触发时间之后执行触发语句。
触发事件:指数据库操作触发条件,其中,包括INSERT,UPDATE和DELETE。
表名:指定触发时间操作表的名称。
FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。
delimiter//
create trigger auto_save_time before insert
on studentinfo foreach rowinsert into timelog(savetime)values(now());//
在向studentinfo表中插入数据时,savetime表中也会被插入一条当前系统时间的数据。
创建具有多个执行语句的触发器
CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件ON 表名 FOR EACH ROW
BEGIN
执行语句列表;
END
delimiter//
create trigger delete_time_info after delete
on studentinfo foreach rowbegin
insert into timelog(savetime)values(now());insert into timeinfo(info)values('deleteact');end
//当用户对students表执行DELETE操作时,students数据库中的timelog数据表和timeinfo数据表中分别被插入操作时间和操作信息。
在MySQL中,一个表在相同的时间和相同的触发时间只能创建一个触发器,如触发时间INSERT,触发时间为AFTER的触发器只能有一个,但是可以定义BEFORE的触发器。
查看触发器
在MySQL中,可以执行SHOW TRIGGERS语句查看触发器的基本信息,其基本形式如下:
SHOW TRIGGERS;
在命令提示符中输入SHOW TRIGGERS语句即可查看选择数据库中的所有触发器,但是,应用该查看语句存在一定弊端,即只能查询所有触发器的内容,并不能指定查看某个触发器的信息。这样一来,就会在用户查找指定触发器信息的时候带来极大不便。故推荐只在触发器数量较少的情况下应用SHOW TRIGGERS语句查询触发器基本信息。
查看triggers表中触发器信息
在MySQL中,所有触发器的定义都存在该数据库的triggers表中。读者可以通过查询triggers表来查看数据库中所有触发器的详细信息。查询语句如下所示:
SELECT * FROM information_schema.triggers;
其中,information_schema是MySQL中默认存在的库,而information_schema是数据库中用于记录触发器信息的数据表。通过SELECT语句查看触发器信息,如果用户想要查看某个指定触发器的内容,可以通过where子句应用TRIGGER字段作为查询条件。代码如下:
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='触发器名称';
其中,“触发器名称”这一参数为用户指定要查看的触发器名称,和其他SELECT查询语句相同,该名称内容需要用一对“''”(单引号)引用指定的文字内容。
应用触发器