一、触发器的概念
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端保数据的完整性。
触发器是一种特殊类型的存储过程,不由用户直接调用,创建触发器时会对其进行定义,以便在特定表或列做特定类型的数据修改时执行。
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。
二、触发器的作用
1》触发器可通过数据库中的相关表实现级联更改,通过级联引用完整性约束可以更有效地执行这些更改。
2》触发器可以强制比用CHECK约束定义的约束更为复杂的约束,与CHECK约束不同,触发器可以引用其它表中的列。例如:触发器可以使用另一个表中的SELECT比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。
3》触发器还可以强制执行业务规则
4》触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
三、触发器弊端
1》过多的触发器使得数据逻辑变得复杂
2》数据操作比较隐含,不易进行调整修改
3》触发器的功能逐渐在代码逻辑或事务中代替实现
四、触发器语法
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE | AFTER [ INSERT | UPDATE | DELETE ] ON table_name FOR EACH ROW sql_statement
$$
DELIMITER;
before :先完成触发,再进行增删改,触发的语句先于监视的增删改
after:先完成数据的增删改,在进行触发,触发的 语句后于监视的增删改
五、NEW 与 OLD详解
MySQL中定义了NEW 和OLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容:具体地:
1》在INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据
2》在UPDATE型触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据;
3》在DELETE型触发器中,OLD用来表示将要或已经被删除的原数据。
使用方法:
NEW.列名
OLD是只读的,而NEW则可以在触发器中使用SET赋值,这样不会再次触发触发器,造成循环调用。
五、查看触发器
SHOW TRIGGERS;
六、删除触发器
DROP TRIGGER trigger_name;