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;