软件测试 | 创建触发器
创建触发器的语法如下:
注意:触发器只能创建在永久表(Permanent Table)上,不能对临时表(Temporary Table)创建触发器。
其中 trigger_time 是触发器的触发时间,可以是 BEFORE 或者 AFTER,BEFORE 的含义指在检查约束前触发,而 AFTER 是在检查约束后触发。
而 trigger_event 就是触发器的触发事件,可以是 INSERT、UPDATE 或者 DELETE。
对同一个表相同触发时间的相同触发事件,只能定义一个触发器。例如,对某个表的不同字段的 AFTER 更新触发器,在使用 Oracle 数据库的时候,可以定义成两个不同的 UPDATE 触发器,更新不同的字段时触发单独的触发器,但是在 MYSQL 数据库中,只能定义成一个触发
器,在触发器中通过判断更新的字段进行对应的处理。 使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。
现在触发器还只支持行级触发的,不支持语句级触发。 在样例数据库中,为 film 表创建了 AFTER INSERT 的触发器,具体如下:
插入 film 表记录的时候,会向 film_text 表中也插入相应的记录。
对于 INSERT INOT…ON DUPLICATE KEY UPDATE…语句来说,触发触发器的顺序可能会造成疑惑。下面对 film 表分别创建了 BEFROE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE 触发器,然后插入记录,观察触发器的触发情况:
从上面的例子可以知道,对于有重复记录,需要进行 UPDATE 操作的 INSERT,触发器触发的顺序是 BEFORE INSERT、BEFORE UPDATE、AFTER UPDATE;对于没有重复记录的 INSERT,就是简单的执行 INSERT 操作,触发器触发的顺序是 BEFORE INSERT、AFTER INSERT。对于那些实际执行 UPDATE 操作的记录,仍然会执行 BEFORE INSERT 触发器的内容,在设计触发器的时候一定要考虑这种情况,避免错误地触发了触发器。
搜索微信公众号:TestingStudio霍格沃兹的干货都很硬核