mysql trigger - yaokun123/php-wiki GitHub Wiki

Mysql的触发器

一、触发器定义

进行数据库应用软件的开发时,我们有时会碰到表中的某些数据改变,希望同时引起其他相关数据改变的需求,利用触发器就能满足这样的需求。 它能在表中的某些特定数据变化时自动完成某些查询。运用触发器不仅可以简化程序,而且还可以增加程序的灵活性。

触发器是一类特殊的事务,可以监视某种数据操作(insert/update/deleted)并触发相关操作(insert/update/deleted)。

创建触发器的4要素:

1、监视地点(table)
2、监视事件(insert/update/deleted)
3、触发时间(after/before)
4、触发事件(insert/update/deleted)

二、创建语法

在创建之前可以先查看一下已有哪些触发器:
show triggers

删除已有触发器:
drop trigger triggerName

创建触发器的语法:
create trigger 触发器名称
after/before(触发时间)
insert/update/deleted(监视事件)
on 表名(监视地址)
for each row
begin
sql1;
...
sqlN;
end

demo:
需求:
商品表:goods
订单表:order
当下1个订单时,对应的商品要相应的减少(买几个商品就减少几个库存)

分析:
监视谁:order
监视动作:insert
触发时间:暂选之后吧
触发事件:update

create trigger t1
after
insert
on order
for each row
begin
update goods xxxxx(update goods set num=num-2 where gid=1)
end

三、触发器中引入行变量

insert(被监视的语句),产生的数据,能否在触发器中引用到?

create trigger t2
after
insert
on order
for each row
begin
update goods xxxxx(update goods set num=num-new.much(field) where gid=new.gid(field))
end

//new表示对新行的引用
//old表示对旧行的引用