基本简介:
1.触发器可以让你在执行insert,update,delete语句的时候,执行一些特定的操作。并且可以在MySQL中指定是在sql语句执行前触发还是执行后触发。
2.触发器没有返回值。
3.触发器可以减少客户端和服务器之间的通信,所以触发器可以简化应用逻辑,还可以提高性能。
4.mysql触发器的实现非常简单,所以功能也有限。
注意事项:
1.对每一个表的每一个事件,最多只能定义一个触发器(即不能再after insert上定义两个触发器);
2.MySQL只支持“基于行的触发”——也就是说,触发器始终是针对一条记录的,而不是针对整个SQL语句的。如果变更的数据集非常大的话,效率会很低。
触发器的限制:
1.触发器可以掩盖服务器背后的工作,一个简单的sql语句背后,因为触发器,可能包含很多看不见的工作。例如触发器可能会更新另一个相关表,那么这个触发器会让这条SQL影响的记录数翻一倍。
2.触发器的问题很难排查,如果某个性能问题和触发器有关,会很难分析和定位。
3.触发器可能会导致死锁或者锁等待。如果触发器失败,那么原来的SQL语句也会失败。如果没有意识到这其中是触发器在搞鬼,那么很难理解服务器抛出的错误代码是什么意思。
说明:
1.触发器不一定能保证更新的原子性。
2.Innodb表上的触发器是在同一个事务中完成的,所以它们执行的操作是原子的,原操作和触发器操作会同时成功或者失败。如果在InnoDB表上建触发器去检查数据的一致性,需要特别小心MVCC,稍不小心,就会得到错误的结果。
3.触发器非常有用,特别是实现一些约束,系统维护任务,以及更新反范式化数据的时候。
4.还可以试用触发器来记录数据变更日志。