现在的位置: 首页 > 综合 > 正文

mysql笔记 五 触发器

2013年05月14日 ⁄ 综合 ⁄ 共 1380字 ⁄ 字号 评论关闭

触发器 trigger枪击 扳机 引线的意思

一触即发

作用:监视某种情况并触发某种操作

应用场景:某些在业务上不可分割的操作逻辑,要同时写多条sql语句 可以用触发器

我们可以监视某表的变化,当发生某种变化时候 触发某个操作

触发器:

能监视:增、删、改

能触发:增、删、改

触发器 监视    监视事件  增删改 监视事件 after (发生之后)/before(发生之前)  触发事件 增删改

之后:比如你吃好饭之后,出去就要收钱

之前:比如你进公园之前,要票

创建触发器

监视地点  表名

监视事件 insert/update/delete

监视事件  alter/before

查看触发器 show triggers;

Create trigger  triggerName 

Alter/before  insert/update/delete on 表名

For each row   这句话是行触发器 mysql里面没有表触发器

Begin

   Sql 语句 一句或者多句 必须是 insert/update/delete  ;必须是分号结束

End

写触发器的时候 先 delimiter  $  设置$是结束符

create trigger  tg1 

after insert on o

for each row

begin

update g set num = num - 3 where id = 2;

end;

删除 触发器

Drop trigger  triggerName

如何引用触发器的值

对于insert而言 新增的行 用new来表示

行中的每一列 用 new.列名来表示

create trigger  tg1 

after insert on o

for each row

begin

update g set num = num - new.much where id = new.gid;

end;

删除订单的数量 库存相应改变

create trigger tg3

after delete on o

for each row 

begin

update g set num = num + old.much where id = old.gid;

end$

对于delete 可以用old来表示数据 

对于 insert 可以用new来表示

对于update 可以用修改之前用old 修改之后用new

修改订单 

create trigger tg4

after update on o

for each row

begin

update g set num = num + old.much - new.much where id = old.gid;

end$

反正他是自动查询修改那一行的列 就算你sql语句里面没有列 他也会自己查询

After 是先完成 增删改 然后再触发

触发语句 晚于增删改,无法影响前面的增删改的动作

Before  是先完成触发,然后增删改

触发的语句先于监视的增删改发生

Create  trigger tg5

Before insert on o 

For each row

Begin

 If new.mach  >5 then 

  Set  new.macth = 5;

End if;

Update g set num = num -new.much where id = new.gid;

End$

抱歉!评论已关闭.