drop table if exists t1, t2; drop view if exists v1; drop database if exists mysqltest; create table t1 (i int); create trigger trg before insert on t1 for each row set @a:=1; set @a:=0; select @a; @a 0 insert into t1 values (1); select @a; @a 1 drop trigger t1.trg; create trigger trg before insert on t1 for each row set @a:=new.i; insert into t1 values (123); select @a; @a 123 drop trigger t1.trg; drop table t1; create table t1 (i int not null, j int); create trigger trg before insert on t1 for each row begin if isnull(new.j) then set new.j:= new.i * 10; end if; end| insert into t1 (i) values (1)| insert into t1 (i,j) values (2, 3)| select * from t1| i j 1 10 2 3 drop trigger t1.trg| drop table t1| create table t1 (i int not null primary key); create trigger trg after insert on t1 for each row set @a:= if(@a,concat(@a, ":", new.i), new.i); set @a:=""; insert into t1 values (2),(3),(4),(5); select @a; @a 2:3:4:5 drop trigger t1.trg; drop table t1; create table t1 (aid int not null primary key, balance int not null default 0); insert into t1 values (1, 1000), (2,3000); create trigger trg before update on t1 for each row begin declare loc_err varchar(255); if abs(new.balance - old.balance) > 1000 then set new.balance:= old.balance; set loc_err := concat("Too big change for aid = ", new.aid); set @update_failed:= if(@update_failed, concat(@a, ":", loc_err), loc_err); end if; end| set @update_failed:=""| update t1 set balance=1500| select @update_failed; select * from t1| @update_failed Too big change for aid = 2 aid balance 1 1500 2 3000 drop trigger t1.trg| drop table t1| create table t1 (i int); insert into t1 values (1),(2),(3),(4); create trigger trg after update on t1 for each row set @total_change:=@total_change + new.i - old.i; set @total_change:=0; update t1 set i=3; select @total_change; @total_change 2 drop trigger t1.trg; drop table t1; create table t1 (i int); insert into t1 values (1),(2),(3),(4); create trigger trg before delete on t1 for each row set @del_sum:= @del_sum + old.i; set @del_sum:= 0; delete from t1 where i <= 3; select @del_sum; @del_sum 6 drop trigger t1.trg; drop table t1; create table t1 (i int); insert into t1 values (1),(2),(3),(4); create trigger trg after delete on t1 for each row set @del:= 1; set @del:= 0; delete from t1 where i <> 0; select @del; @del 1 drop trigger t1.trg; drop table t1; create table t1 (i int, j int); create trigger trg1 before insert on t1 for each row begin if new.j > 10 then set new.j := 10; end if; end| create trigger trg2 before update on t1 for each row begin if old.i % 2 = 0 then set new.j := -1; end if; end| create trigger trg3 after update on t1 for each row begin if new.j = -1 then set @fired:= "Yes"; end if; end| set @fired:=""; insert into t1 values (1,2),(2,3),(3,14); select @fired; @fired select * from t1; i j 1 2 2 3 3 10 update t1 set j= 20; select @fired; @fired Yes select * from t1; i j 1 20 2 -1 3 20 drop trigger t1.trg1; drop trigger t1.trg2; drop trigger t1.trg3; drop table t1; create table t1 (id int not null primary key, data int); create trigger t1_bi before insert on t1 for each row set @log:= concat(@log, "(BEFORE_INSERT: new=(id=", new.id, ", data=", new.data,"))"); create trigger t1_ai after insert on t1 for each row set @log:= concat(@log, "(AFTER_INSERT: new=(id=", new.id, ", data=", new.data,"))"); create trigger t1_bu before update on t1 for each row set @log:= concat(@log, "(BEFORE_UPDATE: old=(id=", old.id, ", data=", old.data, ") new=(id=", new.id, ", data=", new.data,"))"); create trigger t1_au after update on t1 for each row set @log:= concat(@log, "(AFTER_UPDATE: old=(id=", old.id, ", data=", old.data, ") new=(id=", new.id, ", data=", new.data,"))"); create trigger t1_bd before delete on t1 for each row set @log:= concat(@log, "(BEFORE_DELETE: old=(id=", old.id, ", data=", old.data,"))"); create trigger t1_ad after delete on t1 for each row set @log:= concat(@log, "(AFTER_DELETE: old=(id=", old.id, ", data=", old.data,"))"); set @log:= ""; insert into t1 values (1, 1); select @log; @log (BEFORE_INSERT: new=(id=1, data=1))(AFTER_INSERT: new=(id=1, data=1)) set @log:= ""; insert ignore t1 values (1, 2); select @log; @log (BEFORE_INSERT: new=(id=1, data=2)) set @log:= ""; replace t1 values (1, 3), (2, 2); select @log; @log (BEFORE_INSERT: new=(id=1, data=3))(BEFORE_UPDATE: old=(id=1, data=1) new=(id=1, data=3))(AFTER_UPDATE: old=(id=1, data=1) new=(id=1, data=3))(BEFORE_INSERT: new=(id=2, data=2))(AFTER_INSERT: new=(id=2, data=2)) alter table t1 add ts timestamp default now(); set @log:= ""; replace t1 (id, data) values (1, 4); select @log; @log (BEFORE_INSERT: new=(id=1, data=4))(BEFORE_DELETE: old=(id=1, data=3))(AFTER_DELETE: old=(id=1, data=3))(AFTER_INSERT: new=(id=1, data=4)) set @log:= ""; insert into t1 (id, data) values (1, 5), (3, 3) on duplicate key update data= data + 2; select @log; @log (BEFORE_INSERT: new=(id=1, data=5))(BEFORE_UPDATE: old=(id=1, data=4) new=(id=1, data=6))(AFTER_UPDATE: old=(id=1, data=4) new=(id=1, data=6))(BEFORE_INSERT: new=(id=3, data=3))(AFTER_INSERT: new=(id=3, data=3)) drop table t1; create table t1 (i int); create trigger trg before insert on t1 for each row set @a:= old.i; ERROR HY000: There is no OLD row in on INSERT trigger create trigger trg before delete on t1 for each row set @a:= new.i; ERROR HY000: There is no NEW row in on DELETE trigger create trigger trg before update on t1 for each row set old.i:=1; ERROR HY000: Updating of OLD row is not allowed in trigger create trigger trg before delete on t1 for each row set new.i:=1; ERROR HY000: There is no NEW row in on DELETE trigger create trigger trg after update on t1 for each row set new.i:=1; ERROR HY000: Updating of NEW row is not allowed in after trigger create trigger trg before update on t1 for each row set new.j:=1; ERROR 42S22: Unknown column 'j' in 'NEW' create trigger trg before update on t1 for each row set @a:=old.j; ERROR 42S22: Unknown column 'j' in 'OLD' create trigger trg before insert on t2 for each row set @a:=1; ERROR 42S02: Table 'test.t2' doesn't exist create trigger trg before insert on t1 for each row set @a:=1; create trigger trg after insert on t1 for each row set @a:=1; ERROR HY000: Trigger already exists create trigger trg2 before insert on t1 for each row set @a:=1; ERROR HY000: Trigger already exists drop trigger t1.trg; drop trigger t1.trg; ERROR HY000: Trigger does not exist create view v1 as select * from t1; create trigger trg before insert on v1 for each row set @a:=1; ERROR HY000: Trigger's 'v1' is view or temporary table drop view v1; drop table t1; create temporary table t1 (i int); create trigger trg before insert on t1 for each row set @a:=1; ERROR HY000: Trigger's 't1' is view or temporary table drop table t1; create table t1 (x1col char); create trigger tx1 before insert on t1 for each row set new.x1col = 'x'; insert into t1 values ('y'); drop trigger t1.tx1; drop table t1; create table t1 (i int) engine=myisam; insert into t1 values (1), (2); create trigger trg1 before delete on t1 for each row set @del_before:= @del_before + old.i; create trigger trg2 after delete on t1 for each row set @del_after:= @del_after + old.i; set @del_before:=0, @del_after:= 0; delete from t1; select @del_before, @del_after; @del_before @del_after 3 3 drop trigger t1.trg1; drop trigger t1.trg2; drop table t1; create table t1 (a int); create trigger trg1 before insert on t1 for each row set new.a= 10; drop table t1; create table t1 (a int); insert into t1 values (); select * from t1; a NULL drop table t1; create database mysqltest; use mysqltest; create table t1 (i int); create trigger trg1 before insert on t1 for each row set @a:= 1; drop database mysqltest; use test; create table t1 (i int, j int default 10, k int not null, key (k)); create table t2 (i int); insert into t1 (i, k) values (1, 1); insert into t2 values (1); create trigger trg1 before update on t1 for each row set @a:= @a + new.j - old.j; create trigger trg2 after update on t1 for each row set @b:= "Fired"; set @a:= 0, @b:= ""; update t1, t2 set j = j + 10 where t1.i = t2.i; select @a, @b; @a @b 10 Fired insert into t1 values (2, 13, 2); insert into t2 values (2); set @a:= 0, @b:= ""; update t1, t2 set j = j + 15 where t1.i = t2.i and t1.k >= 2; select @a, @b; @a @b 15 Fired create trigger trg3 before delete on t1 for each row set @c:= @c + old.j; create trigger trg4 before delete on t2 for each row set @d:= @d + old.i; create trigger trg5 after delete on t1 for each row set @e:= "After delete t1 fired"; create trigger trg6 after delete on t2 for each row set @f:= "After delete t2 fired"; set @c:= 0, @d:= 0, @e:= "", @f:= ""; delete t1, t2 from t1, t2 where t1.i = t2.i; select @c, @d, @e, @f; @c @d @e @f 48 3 After delete t1 fired After delete t2 fired drop table t1, t2; create table t1 (i int, j int default 10)| create table t2 (i int)| insert into t2 values (1), (2)| create trigger trg1 before insert on t1 for each row begin if new.i = 1 then set new.j := 1; end if; end| create trigger trg2 after insert on t1 for each row set @a:= 1| set @a:= 0| insert into t1 (i) select * from t2| select * from t1| i j 1 1 2 10 select @a| @a 1 drop table t1, t2| create table t1 (i int, j int, k int); create trigger trg1 before insert on t1 for each row set new.k = new.i; create trigger trg2 after insert on t1 for each row set @b:= "Fired"; set @b:=""; load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, i); select *, @b from t1; i j k @b 10 NULL 10 Fired 15 NULL 15 Fired set @b:=""; load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, j); select *, @b from t1; i j k @b 10 NULL 10 Fired 15 NULL 15 Fired 1 2 1 Fired 3 4 3 Fired 5 6 5 Fired drop table t1; create table t1 (i int, at int, k int, key(k)) engine=myisam; create table t2 (i int); insert into t1 values (1, 1, 1); insert into t2 values (1), (2), (3); create trigger ai after insert on t1 for each row set @a:= new.at; create trigger au after update on t1 for each row set @a:= new.at; create trigger ad after delete on t1 for each row set @a:= old.at; alter table t1 drop column at; select * from t1; i k 1 1 insert into t1 values (2, 1); ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 1 1 2 1 update t1 set k = 2 where i = 2; ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 1 1 2 2 delete from t1 where i = 2; ERROR 42S22: Unknown column 'at' in 'OLD' select * from t1; i k 1 1 load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k); ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 1 1 1 2 insert into t1 select 3, 3; ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 1 1 1 2 3 3 update t1, t2 set k = k + 10 where t1.i = t2.i; ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 1 11 1 2 3 3 update t1, t2 set k = k + 10 where t1.i = t2.i and k < 3; ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 1 11 1 12 3 3 delete t1, t2 from t1 straight_join t2 where t1.i = t2.i; ERROR 42S22: Unknown column 'at' in 'OLD' select * from t1; i k 1 12 3 3 delete t2, t1 from t2 straight_join t1 where t1.i = t2.i; ERROR 42S22: Unknown column 'at' in 'OLD' select * from t1; i k 3 3 alter table t1 add primary key (i); insert into t1 values (3, 4) on duplicate key update k= k + 10; ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 3 13 replace into t1 values (3, 3); ERROR 42S22: Unknown column 'at' in 'NEW' select * from t1; i k 3 3 alter table t1 add ts timestamp default now(); replace into t1 (i, k) values (3, 13); ERROR 42S22: Unknown column 'at' in 'OLD' select * from t1; i k ts drop table t1, t2; create table t1 (i int, bt int, k int, key(k)) engine=myisam; create table t2 (i int); insert into t1 values (1, 1, 1), (2, 2, 2); insert into t2 values (1), (2), (3); create trigger bi before insert on t1 for each row set @a:= new.bt; create trigger bu before update on t1 for each row set @a:= new.bt; create trigger bd before delete on t1 for each row set @a:= old.bt; alter table t1 drop column bt; insert into t1 values (3, 3); ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 update t1 set i = 2; ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 delete from t1; ERROR 42S22: Unknown column 'bt' in 'OLD' select * from t1; i k 1 1 2 2 load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k); ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 insert into t1 select 3, 3; ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 update t1, t2 set k = k + 10 where t1.i = t2.i; ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 update t1, t2 set k = k + 10 where t1.i = t2.i and k < 2; ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 delete t1, t2 from t1 straight_join t2 where t1.i = t2.i; ERROR 42S22: Unknown column 'bt' in 'OLD' select * from t1; i k 1 1 2 2 delete t2, t1 from t2 straight_join t1 where t1.i = t2.i; ERROR 42S22: Unknown column 'bt' in 'OLD' select * from t1; i k 1 1 2 2 alter table t1 add primary key (i); drop trigger t1.bi; insert into t1 values (2, 4) on duplicate key update k= k + 10; ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 replace into t1 values (2, 4); ERROR 42S22: Unknown column 'bt' in 'NEW' select * from t1; i k 1 1 2 2 alter table t1 add ts timestamp default now(); replace into t1 (i, k) values (2, 11); ERROR 42S22: Unknown column 'bt' in 'OLD' select * from t1; i k ts 1 1 0000-00-00 00:00:00 2 2 0000-00-00 00:00:00 drop table t1, t2; drop function if exists bug5893; create table t1 (col1 int, col2 int); insert into t1 values (1, 2); create function bug5893 () returns int return 5; create trigger t1_bu before update on t1 for each row set new.col1= bug5893(); drop function bug5893; update t1 set col2 = 4; ERROR 42000: FUNCTION test.bug5893 does not exist drop table t1;