触发器
一、描述
触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。
二、创建与使用触发器
1.创建只有一个执行语句的触发器
例:创建一个trig_book触发器,该触发器在表t_book插入一条数据后,对表t_bookType的bookNum数量对应的bookTypeId会自动加1
create trigger trig_book after insert
on t_book for each row
update t_bookType set bookNum = bookNum+1 where new.bookTypeId = t_booktype.id;
INSERT INTO t_book VALUES(NULL,'java好',100,'ke',1);
t_book表:
t_bookType表:
2.创建有多个执行语句的触发器
例子:
DELIMITER | 数据库语句 | DELIMITER;//告诉数据库这时一条语句内容
new old 触发的两个过度变量;new:新增一条语句的新增对象;old:删除一条语句的删除对象;
DELIMITER |
create trigger trig_book2 after delete
on t_book for each row
begin
update t_bookType set bookNum = bookNum-1 where old.bookTypeId=t_booktype.id;
insert into t_log values(null,NOW(),‘在book表里删除了一条数据’);
delete from t_test where old.bookTypeId = t_test.id;
end
|
DELIMITER ;
DELETE FROM t_book WHERE id=5;
三、查看触发器
1.SHOWTRIGGERS 语句查看触发器信息
SHOW TRIGGERS;
2.在 triggers 表中查看触发器信息
DROP TRIGGER trig_book2 ;
四、触发器的作用
①增加安全性。
②利用触发器记录所进行的修改及相关信息,跟踪用户对数据库的操作,实现审计。
③维护那些通过创建表时的声明约束不可能实现的复杂的完整性约束以及对数据库中特定事件进行监控与响应。
④实现复杂的非标准的数据库相关完整性规则,同步实时的复制表中的数据。
⑤触发器是自动的,他们对表的数据做了任何修改之后都被激活。
例如可以自动计算数据值,若数据的值达到一定要求,则进行特殊处理。以某企业财务管理为例,如果企业的资金出现短缺,并且达到了某种程度,则发出警告信息。
五、触发器分为事先触发器和事后触发器,它们之间的区别
简单而言,事前触发主要是验证一些条件或进行一些准备工作,在表保存之前就触发,而事后触发则是进行收尾工作,保证事务的完整性,在表经过修改以后才触发。行级触发器是对DML语句影响的每个行执行一次,如UPDATE语句影响多行,就会对每行都激活一次触发器。而语句级触发器是对每个DML语句执行一次,如INSERT语句在表中即使插入了100多行,表上的INSERT语句级触发器也只会执行一次。