mysql编程--触发器

6.触发器(trigger

含义:触发器也是一段预先定义好的代码(跟存储过程和存储函数一样),并有个名字。

但:

它不能调用,而是,在某个表发生某个事件(增、删、改)的时候,会自动“触发”而调用起来。

定义形式:

Create trigger 触发器名 触发时机 触发事件 on 表名 for eachrow

Begin

   //语句块

End;

说明:1.触发时机只有两个:before(在之前),after(在之后);

     2.触发事件只有三个:insert、update、delete

      3.触发器的含义是:在某个表上进行insert、update以及delete之前或之后,会去执行其中写好的代码(语句);即只有6个情形会可能调用该触发器

     4.通常触发器用于在对某个表进行增删改的操作的时候,需要同时去做另外一件事情的时候

     5.在触发器内部有两个关键字代表某种特定的含义,可以用来获取数据

      New:代表当前正要执行的insert或update的时候的“新行“数据,通过它,可以获取这一新行数据的任意一个字段的值,形式为:

      Set @v1=new.id;//获取新插入或update行的id字段的值

      Old:代表当前正要执行的delete的时候的“旧行“数据,通过它,可以获取这一新行数据的任意一个字段的值,形式为:

      Set@v1=old.id;

 

Tab_int_max1始终存储tab_int的最大值,当tab_int中插入数据时,触发器执行

例:

create trigger tri1 after insert on tab_int for each row
Begin
   Delete from tab_int_max1;   #删除tab_int_max1中所有值
   Select max(f1) into @maxf1 from tab_int;     #取得tab_int中的最大值存入变量
   Select f2 into @v2 from tab_int where f1=@maxf1;
Select f3 into @v3 from tab_int where f1=@maxf1;
   Insert into tab_int_max1 (f1,f2,f3) values (@maxf1,@v2,@v3);
End;

在表tab_int进行insert之前,将该行数据同时插入到跟其类似结果的表(tab_int_some)中。

create trigger copy_data before insert on tab_int for each row
Begin
    Set @v1=new.f1;  #获得新行的字段f1的值
Set  @v2=new.f2;  #获得新行的字段f2的值
Insert into tab_int_some (f1,f2) values (@v1,@v2);
End;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值