触发器(trigger)


定义           

触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL           也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。           触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。     

 语法         

 CREATE TRIGGER trigger_name //触发器名称           

trigger_time //触发时间 after | before           

trigger_event //触发事件 insert | update |delete              

ON tbl_name  //在哪一个表              

FOR EACH ROW                

trigger_stmt //执行的sql语句         

查看触发器              

show triggers [from 数据库名]         

删除触发器              

drop trigger [if exists] [数据库名.]trigger_name
       

 执行顺序              

一般都是在innodb上建立触发器,因为建立的表支持事务,trigger是事务安全的,如果执行失败的话,会有回滚操作                   

1.如果 BEFORE 触发器执行失败,SQL 无法正确执行。                

2.SQL 执行失败时,AFTER 型触发器不会触发。                

3.AFTER 类型的触发器执行失败,SQL 会回滚
     举例           

1.购物车与库存                

CREATE TRIGGER insert_change before insert on `order` for each row    

begin                

update kucun set num=num-new.num where id=new.id;                

end           

2.购物车与库存                

create trigger update_change before update on `order` for each ROW                

begin                

update kucun set num=num-(new.num-old.num) where id = new.id;                

end           

3.优化版本                

create trigger update_change before update on `order` for each ROW                

begin                

set @k_num=(select num from kucun where id=new.id);                

if new.num > @k_num+old.num then                

set new.num=@k_num+old.num;               

 end if;                

update kucun set num=num-(new.num-old.num) where id = new.id;                

end


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注