📄 trigger.result
字号:
drop table if exists t1, t2, t3, t4;drop view if exists v1;drop database if exists mysqltest;drop function if exists f1;drop function if exists f2;drop procedure if exists p1;create table t1 (i int);create trigger trg before insert on t1 for each row set @a:=1;set @a:=0;select @a;@a0insert into t1 values (1);select @a;@a1drop trigger trg;create trigger trg before insert on t1 for each row set @a:=new.i;insert into t1 values (123);select @a;@a123drop trigger 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) thenset 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 j1 102 3drop trigger 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;@a2:3:4:5drop trigger 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 begindeclare loc_err varchar(255);if abs(new.balance - old.balance) > 1000 thenset 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_failedToo big change for aid = 2aid balance1 15002 3000drop trigger 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_change2drop trigger 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_sum6drop trigger 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;@del1drop trigger trg;drop table t1;create table t1 (i int, j int);create trigger trg1 before insert on t1 for each row beginif new.j > 10 thenset new.j := 10;end if;end|create trigger trg2 before update on t1 for each row beginif old.i % 2 = 0 thenset new.j := -1;end if;end|create trigger trg3 after update on t1 for each row beginif new.j = -1 thenset @fired:= "Yes";end if;end|set @fired:="";insert into t1 values (1,2),(2,3),(3,14);select @fired;@firedselect * from t1;i j1 22 33 10update t1 set j= 20;select @fired;@firedYesselect * from t1;i j1 202 -13 20drop trigger trg1;drop trigger trg2;drop trigger 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 rowset @log:= concat(@log, "(BEFORE_INSERT: new=(id=", new.id, ", data=", new.data,"))");create trigger t1_ai after insert on t1 for each rowset @log:= concat(@log, "(AFTER_INSERT: new=(id=", new.id, ", data=", new.data,"))");create trigger t1_bu before update on t1 for each rowset @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 rowset @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 rowset @log:= concat(@log, "(BEFORE_DELETE: old=(id=", old.id, ", data=", old.data,"))");create trigger t1_ad after delete on t1 for each rowset @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 (id int primary key, data varchar(10), fk int);create table t2 (event varchar(100));create table t3 (id int primary key);create trigger t1_ai after insert on t1 for each row insert into t2 values (concat("INSERT INTO t1 id=", new.id, " data='", new.data, "'"));insert into t1 (id, data) values (1, "one"), (2, "two");select * from t1;id data fk1 one NULL2 two NULLselect * from t2;eventINSERT INTO t1 id=1 data='one'INSERT INTO t1 id=2 data='two'drop trigger t1_ai;create trigger t1_bi before insert on t1 for each rowbeginif exists (select id from t3 where id=new.fk) theninsert into t2 values (concat("INSERT INTO t1 id=", new.id, " data='", new.data, "' fk=", new.fk));elseinsert into t2 values (concat("INSERT INTO t1 FAILED id=", new.id, " data='", new.data, "' fk=", new.fk));set new.id= NULL;end if;end|insert into t3 values (1);insert into t1 values (4, "four", 1), (5, "five", 2);ERROR 23000: Column 'id' cannot be nullselect * from t1;id data fk1 one NULL2 two NULL4 four 1select * from t2;eventINSERT INTO t1 id=1 data='one'INSERT INTO t1 id=2 data='two'INSERT INTO t1 id=4 data='four' fk=1INSERT INTO t1 FAILED id=5 data='five' fk=2drop table t1, t2, t3;create table t1 (id int primary key, data varchar(10));create table t2 (seq int);insert into t2 values (10);create function f1 () returns int return (select max(seq) from t2);create trigger t1_bi before insert on t1 for each rowbeginif new.id > f1() thenset new.id:= f1();end if;end|insert into t1 values (1, "first");insert into t1 values (f1(), "max");select * from t1;id data1 first10 maxdrop table t1, t2;drop function f1;create table t1 (id int primary key, fk_t2 int);create table t2 (id int primary key, fk_t3 int);create table t3 (id int primary key);insert into t1 values (1,1), (2,1), (3,2);insert into t2 values (1,1), (2,2);insert into t3 values (1), (2);create trigger t3_ad after delete on t3 for each rowdelete from t2 where fk_t3=old.id;create trigger t2_ad after delete on t2 for each rowdelete from t1 where fk_t2=old.id;delete from t3 where id = 1;select * from t1 left join (t2 left join t3 on t2.fk_t3 = t3.id) on t1.fk_t2 = t2.id;id fk_t2 id fk_t3 id3 2 2 2 2drop table t1, t2, t3;create table t1 (id int primary key, copy int);create table t2 (id int primary key, data int);insert into t2 values (1,1), (2,2);create trigger t1_bi before insert on t1 for each rowset new.copy= (select data from t2 where id = new.id);create trigger t1_bu before update on t1 for each rowset new.copy= (select data from t2 where id = new.id);insert into t1 values (1,3), (2,4), (3,3);update t1 set copy= 1 where id = 2;select * from t1;id copy1 12 23 NULLdrop table t1, t2;create table t1 (i int);create table t3 (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 triggercreate trigger trg before delete on t1 for each row set @a:= new.i;ERROR HY000: There is no NEW row in on DELETE triggercreate trigger trg before update on t1 for each row set old.i:=1;ERROR HY000: Updating of OLD row is not allowed in triggercreate trigger trg before delete on t1 for each row set new.i:=1;ERROR HY000: There is no NEW row in on DELETE triggercreate trigger trg after update on t1 for each row set new.i:=1;ERROR HY000: Updating of NEW row is not allowed in after triggercreate 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 existcreate 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 existscreate trigger trg2 before insert on t1 for each row set @a:=1;ERROR HY000: Trigger already existscreate trigger trg before insert on t3 for each row set @a:=1;ERROR HY000: Trigger already existscreate trigger trg2 before insert on t3 for each row set @a:=1;drop trigger trg2;drop trigger trg;drop trigger trg;ERROR HY000: Trigger does not existcreate view v1 as select * from t1;create trigger trg before insert on v1 for each row set @a:=1;ERROR HY000: 'test.v1' is not BASE TABLEdrop view v1;drop table t1;drop table t3;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 tabledrop 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 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_after3 3drop trigger trg1;drop trigger 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;aNULLdrop 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 database mysqltest;create table mysqltest.t1 (i int);create trigger trg1 before insert on mysqltest.t1 for each row set @a:= 1;ERROR HY000: Trigger in wrong schemause mysqltest;create trigger test.trg1 before insert on t1 for each row set @a:= 1;ERROR HY000: Trigger in wrong schemadrop 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 @b10 Firedinsert 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 @b15 Firedcreate 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 @f48 3 After delete t1 fired After delete t2 fireddrop 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 beginif new.i = 1 thenset 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 j1 12 10select @a|@a1drop 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_ln/rpl_loaddata.dat' into table t1 (@a, i);select *, @b from t1;i j k @b10 NULL 10 Fired15 NULL 15 Firedset @b:="";load data infile '../std_data_ln/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, j);select *, @b from t1;i j k @b10 NULL 10 Fired15 NULL 15 Fired1 2 1 Fired3 4 3 Fired5 6 5 Fireddrop 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 k1 1insert into t1 values (2, 1);ERROR 42S22: Unknown column 'at' in 'NEW'select * from t1;i k1 12 1update t1 set k = 2 where i = 2;ERROR 42S22: Unknown column 'at' in 'NEW'select * from t1;i k1 12 2delete from t1 where i = 2;ERROR 42S22: Unknown column 'at' in 'OLD'select * from t1;i k1 1load data infile '../std_data_ln/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k);ERROR 42S22: Unknown column 'at' in 'NEW'select * from t1;i k1 11 2insert into t1 select 3, 3;ERROR 42S22: Unknown column 'at' in 'NEW'select * from t1;i k1 11 23 3update t1, t2 set k = k + 10 where t1.i = t2.i;ERROR 42S22: Unknown column 'at' in 'NEW'select * from t1;i k1 111 23 3update 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 k1 111 123 3delete t1, t2 from t1 straight_join t2 where t1.i = t2.i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -