触发器是MySQL响应一下任意语句而自动执行的一条MySQL语句(或位于begin和end语句之间的一组语句):
- delete
- update
- insert
其他MySQL语句不支持触发器
创建触发器
在创建触发器时,需要给出4条信息:
- 唯一的触发器名;
- 触发器关联的表
- 触发器应该响应的活动(delete、insert或update)
- 触发器何时执行(处理之前或之后)
insert触发器
- insert触发器代码内,可引用一个名为new的虚拟表,访问被插入的行
- 在before insert触发器中,new中的值也可以被更新(允许更改插入的值)
- 对于auto_increment列,new在insert执行之前包含0,在insert执行之后包含新的自动生成值
//可以用来确定新生成值
create triger neworder after insert on orders
for each row select new.order_num;
注意:上面的例子在mysql 5.7(wamp下)测试不通过
delete触发器
- 在delete触发器代码内,你可以引用一个名为old的虚拟表,访问被删除的行
- old中的值是只读的
create trigger deleteorder before delete on orders
for each row
begin
insert into archive_orders(order_num, order_date, cust_id)
values(old.order_num, old,order_date, old.cust_id);
end;
update触发器
- 在update触发器代码内,你可以引用一个名为old的虚拟表访问以前的值,引用一个名为new的虚拟表访问新更新的值
- 在before update触发器内,new中的值可能也被更新(运行更改将要用于update语句中的值)
- old中值全都是只读的
create trigger updatevendor before update on vendors
for each row set new.vend_state = upper(new.vend_state);
参考书籍:
- MySQL必知必会
网友评论