create trigger mytrigger alert insert on t_a for each row

begin

        insert into t_b

            set name=new.name,

            set number=new number;

程序体或者是

    set @name=new.name;

    set @number=new.number;

    insert into t_b (name,number) values (@name,@number);

end


foreachrow每行受影响,触发器都执行,叫行级触发器。

oracle触发器中分行级触发器和语句级触发器,可不写foreachrow,无论影响多少行都只执行一次。

mysql不支持语句触发器,所以必须写foreachrow;

触发器的old和new

after触发器—是在记录操纵之后触发,是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作

before触发器—是在记录操纵之前触发,是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作,如:我们在触发之前需要判断new值和old值的大小或关系,如果满足要求就触发,不通过就修改再触发;如:表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分,这里before相当于设置了断点,我们可以处理删除外键。

对于INSERT语句, 只有NEW是合法的;

对于DELETE语句,只有OLD才合法;

对于UPDATE语句,NEW、OLD可以同时使用。


Logo

更多推荐