mysql触发器new和old区别 阿星小栈

mysql触发器new old详解
 
mysql触发器new old:

"NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧
 
的列名属于创建了过渡变量("transition variables")。
 
对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及
 
OLD同时使用。下面是一个UPDATE中同时使用NEW和OLD的例子。
 
CREATE TRIGGER tr1  
BEFORE UPDATE ON t22   
FOR EACH ROW   
BEGIN   
SET @old = OLD.s1;   
SET @new = NEW.s1;   
END;
现在如果t21表中的s1列的值是55,那么执行了"UPDATE t21 SET s1 = s1 + 1"之后@old的值会变成55,

而@new的值将会变成56。
 
触发器的执行间隔:FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
 
列值递增:
 
create table a(  
id int primary key auto_increment,##设置为自动递增  
name varchar(10)  
);
设置初始值为1000 :
ALTER   TABLE   tablename   AUTO_INCREMENT=1000;

 example:

 

DROP TRIGGER IF EXISTS `timeline_insert`;

create trigger timeline_insert

before insert on teacher_timeline for each row

begin 

declare temp_org_id int(11);
select org_id into temp_org_id from teacher_class where id=new.class_id;
set new.org_id=temp_org_id ;

end;

 

DROP TRIGGER IF EXISTS `timeline_update`;

create trigger timeline_update

before insert on teacher_timeline for each row

begin 

declare temp_org_id int(11);
select org_id into temp_org_id from teacher_class where id=new.class_id;
set new.org_id=temp_org_id ;

end;

 

 

DROP TRIGGER IF EXISTS `class_update`;

create trigger class_update

before insert on teacher_class for each row

begin 

update teacher_timeline set org_id = old.org_id  where class_id = old.id;

end;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值