1
drop table if exists t1, t2, t3, t4;
2
drop view if exists v1;
3
drop database if exists mysqltest;
4
drop function if exists f1;
5
drop function if exists f2;
6
drop procedure if exists p1;
7
create table t1 (i int);
8
create trigger trg before insert on t1 for each row set @a:=1;
13
insert into t1 values (1);
18
create trigger trg before insert on t1 for each row set @a:=new.i;
19
insert into t1 values (123);
25
create table t1 (i int not null, j int);
26
create trigger trg before insert on t1 for each row
29
set new.j:= new.i * 10;
32
insert into t1 (i) values (1)|
33
insert into t1 (i,j) values (2, 3)|
40
create table t1 (i int not null primary key);
41
create trigger trg after insert on t1 for each row
42
set @a:= if(@a,concat(@a, ":", new.i), new.i);
44
insert into t1 values (2),(3),(4),(5);
50
create table t1 (aid int not null primary key, balance int not null default 0);
51
insert into t1 values (1, 1000), (2,3000);
52
create trigger trg before update on t1 for each row
54
declare loc_err varchar(255);
55
if abs(new.balance - old.balance) > 1000 then
56
set new.balance:= old.balance;
57
set loc_err := concat("Too big change for aid = ", new.aid);
58
set @update_failed:= if(@update_failed, concat(@a, ":", loc_err), loc_err);
61
set @update_failed:=""|
62
update t1 set balance=1500|
63
select @update_failed;
66
Too big change for aid = 2
72
create table t1 (i int);
73
insert into t1 values (1),(2),(3),(4);
74
create trigger trg after update on t1 for each row
75
set @total_change:=@total_change + new.i - old.i;
83
create table t1 (i int);
84
insert into t1 values (1),(2),(3),(4);
85
create trigger trg before delete on t1 for each row
86
set @del_sum:= @del_sum + old.i;
88
delete from t1 where i <= 3;
94
create table t1 (i int);
95
insert into t1 values (1),(2),(3),(4);
96
create trigger trg after delete on t1 for each row set @del:= 1;
98
delete from t1 where i <> 0;
104
create table t1 (i int, j int);
105
create trigger trg1 before insert on t1 for each row
111
create trigger trg2 before update on t1 for each row
113
if old.i % 2 = 0 then
117
create trigger trg3 after update on t1 for each row
124
insert into t1 values (1,2),(2,3),(3,14);
146
create table t1 (id int not null primary key, data int);
147
create trigger t1_bi before insert on t1 for each row
148
set @log:= concat(@log, "(BEFORE_INSERT: new=(id=", new.id, ", data=", new.data,"))");
149
create trigger t1_ai after insert on t1 for each row
150
set @log:= concat(@log, "(AFTER_INSERT: new=(id=", new.id, ", data=", new.data,"))");
151
create trigger t1_bu before update on t1 for each row
152
set @log:= concat(@log, "(BEFORE_UPDATE: old=(id=", old.id, ", data=", old.data,
153
") new=(id=", new.id, ", data=", new.data,"))");
154
create trigger t1_au after update on t1 for each row
155
set @log:= concat(@log, "(AFTER_UPDATE: old=(id=", old.id, ", data=", old.data,
156
") new=(id=", new.id, ", data=", new.data,"))");
157
create trigger t1_bd before delete on t1 for each row
158
set @log:= concat(@log, "(BEFORE_DELETE: old=(id=", old.id, ", data=", old.data,"))");
159
create trigger t1_ad after delete on t1 for each row
160
set @log:= concat(@log, "(AFTER_DELETE: old=(id=", old.id, ", data=", old.data,"))");
162
insert into t1 values (1, 1);
165
(BEFORE_INSERT: new=(id=1, data=1))(AFTER_INSERT: new=(id=1, data=1))
167
insert ignore t1 values (1, 2);
170
(BEFORE_INSERT: new=(id=1, data=2))
172
insert into t1 (id, data) values (1, 3), (2, 2) on duplicate key update data= data + 1;
175
(BEFORE_INSERT: new=(id=1, data=3))(BEFORE_UPDATE: old=(id=1, data=1) new=(id=1, data=2))(AFTER_UPDATE: old=(id=1, data=1) new=(id=1, data=2))(BEFORE_INSERT: new=(id=2, data=2))(AFTER_INSERT: new=(id=2, data=2))
177
replace t1 values (1, 4), (3, 3);
180
(BEFORE_INSERT: new=(id=1, data=4))(BEFORE_DELETE: old=(id=1, data=2))(AFTER_DELETE: old=(id=1, data=2))(AFTER_INSERT: new=(id=1, data=4))(BEFORE_INSERT: new=(id=3, data=3))(AFTER_INSERT: new=(id=3, data=3))
184
replace t1 values (1, 5);
187
(BEFORE_INSERT: new=(id=1, data=5))(AFTER_INSERT: new=(id=1, data=5))
189
create table t1 (id int primary key, data varchar(10), fk int);
190
create table t2 (event varchar(100));
191
create table t3 (id int primary key);
192
create trigger t1_ai after insert on t1 for each row
193
insert into t2 values (concat("INSERT INTO t1 id=", new.id, " data='", new.data, "'"));
194
insert into t1 (id, data) values (1, "one"), (2, "two");
201
INSERT INTO t1 id=1 data='one'
202
INSERT INTO t1 id=2 data='two'
204
create trigger t1_bi before insert on t1 for each row
206
if exists (select id from t3 where id=new.fk) then
207
insert into t2 values (concat("INSERT INTO t1 id=", new.id, " data='", new.data, "' fk=", new.fk));
209
insert into t2 values (concat("INSERT INTO t1 FAILED id=", new.id, " data='", new.data, "' fk=", new.fk));
213
insert into t3 values (1);
214
insert into t1 values (4, "four", 1), (5, "five", 2);
215
ERROR 23000: Column 'id' cannot be null
223
INSERT INTO t1 id=1 data='one'
224
INSERT INTO t1 id=2 data='two'
225
INSERT INTO t1 id=4 data='four' fk=1
226
INSERT INTO t1 FAILED id=5 data='five' fk=2
227
drop table t1, t2, t3;
228
create table t1 (id int primary key, data varchar(10));
229
create table t2 (seq int);
230
insert into t2 values (10);
231
create function f1 () returns int return (select max(seq) from t2);
232
create trigger t1_bi before insert on t1 for each row
234
if new.id > f1() then
238
insert into t1 values (1, "first");
239
insert into t1 values (f1(), "max");
246
create table t1 (id int primary key, fk_t2 int);
247
create table t2 (id int primary key, fk_t3 int);
248
create table t3 (id int primary key);
249
insert into t1 values (1,1), (2,1), (3,2);
250
insert into t2 values (1,1), (2,2);
251
insert into t3 values (1), (2);
252
create trigger t3_ad after delete on t3 for each row
253
delete from t2 where fk_t3=old.id;
254
create trigger t2_ad after delete on t2 for each row
255
delete from t1 where fk_t2=old.id;
256
delete from t3 where id = 1;
257
select * from t1 left join (t2 left join t3 on t2.fk_t3 = t3.id) on t1.fk_t2 = t2.id;
260
drop table t1, t2, t3;
261
create table t1 (id int primary key, copy int);
262
create table t2 (id int primary key, data int);
263
insert into t2 values (1,1), (2,2);
264
create trigger t1_bi before insert on t1 for each row
265
set new.copy= (select data from t2 where id = new.id);
266
create trigger t1_bu before update on t1 for each row
267
set new.copy= (select data from t2 where id = new.id);
268
insert into t1 values (1,3), (2,4), (3,3);
269
update t1 set copy= 1 where id = 2;
276
create table t1 (i int);
277
create table t3 (i int);
278
create trigger trg before insert on t1 for each row set @a:= old.i;
279
ERROR HY000: There is no OLD row in on INSERT trigger
280
create trigger trg before delete on t1 for each row set @a:= new.i;
281
ERROR HY000: There is no NEW row in on DELETE trigger
282
create trigger trg before update on t1 for each row set old.i:=1;
283
ERROR HY000: Updating of OLD row is not allowed in trigger
284
create trigger trg before delete on t1 for each row set new.i:=1;
285
ERROR HY000: There is no NEW row in on DELETE trigger
286
create trigger trg after update on t1 for each row set new.i:=1;
287
ERROR HY000: Updating of NEW row is not allowed in after trigger
288
create trigger trg before update on t1 for each row set new.j:=1;
289
ERROR 42S22: Unknown column 'j' in 'NEW'
290
create trigger trg before update on t1 for each row set @a:=old.j;
291
ERROR 42S22: Unknown column 'j' in 'OLD'
292
create trigger trg before insert on t2 for each row set @a:=1;
293
ERROR 42S02: Table 'test.t2' doesn't exist
294
create trigger trg before insert on t1 for each row set @a:=1;
295
create trigger trg after insert on t1 for each row set @a:=1;
296
ERROR HY000: Trigger already exists
297
create trigger trg2 before insert on t1 for each row set @a:=1;
298
ERROR 42000: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
299
create trigger trg before insert on t3 for each row set @a:=1;
300
ERROR HY000: Trigger already exists
301
create trigger trg2 before insert on t3 for each row set @a:=1;
305
ERROR HY000: Trigger does not exist
306
create view v1 as select * from t1;
307
create trigger trg before insert on v1 for each row set @a:=1;
308
ERROR HY000: 'test.v1' is not BASE TABLE
312
create temporary table t1 (i int);
313
create trigger trg before insert on t1 for each row set @a:=1;
314
ERROR HY000: Trigger's 't1' is view or temporary table
316
create table t1 (x1col char);
317
create trigger tx1 before insert on t1 for each row set new.x1col = 'x';
318
insert into t1 values ('y');
321
create table t1 (i int) engine=myisam;
322
insert into t1 values (1), (2);
323
create trigger trg1 before delete on t1 for each row set @del_before:= @del_before + old.i;
324
create trigger trg2 after delete on t1 for each row set @del_after:= @del_after + old.i;
325
set @del_before:=0, @del_after:= 0;
327
select @del_before, @del_after;
328
@del_before @del_after
333
create table t1 (a int);
334
create trigger trg1 before insert on t1 for each row set new.a= 10;
336
create table t1 (a int);
337
insert into t1 values ();
342
create database mysqltest;
344
create table t1 (i int);
345
create trigger trg1 before insert on t1 for each row set @a:= 1;
346
drop database mysqltest;
348
create database mysqltest;
349
create table mysqltest.t1 (i int);
350
create trigger trg1 before insert on mysqltest.t1 for each row set @a:= 1;
351
ERROR HY000: Trigger in wrong schema
353
create trigger test.trg1 before insert on t1 for each row set @a:= 1;
354
ERROR 42S02: Table 'test.t1' doesn't exist
355
drop database mysqltest;
357
create table t1 (i int, j int default 10, k int not null, key (k));
358
create table t2 (i int);
359
insert into t1 (i, k) values (1, 1);
360
insert into t2 values (1);
361
create trigger trg1 before update on t1 for each row set @a:= @a + new.j - old.j;
362
create trigger trg2 after update on t1 for each row set @b:= "Fired";
364
update t1, t2 set j = j + 10 where t1.i = t2.i;
368
insert into t1 values (2, 13, 2);
369
insert into t2 values (2);
371
update t1, t2 set j = j + 15 where t1.i = t2.i and t1.k >= 2;
375
create trigger trg3 before delete on t1 for each row set @c:= @c + old.j;
376
create trigger trg4 before delete on t2 for each row set @d:= @d + old.i;
377
create trigger trg5 after delete on t1 for each row set @e:= "After delete t1 fired";
378
create trigger trg6 after delete on t2 for each row set @f:= "After delete t2 fired";
379
set @c:= 0, @d:= 0, @e:= "", @f:= "";
380
delete t1, t2 from t1, t2 where t1.i = t2.i;
381
select @c, @d, @e, @f;
383
48 3 After delete t1 fired After delete t2 fired
385
create table t1 (i int, j int default 10)|
386
create table t2 (i int)|
387
insert into t2 values (1), (2)|
388
create trigger trg1 before insert on t1 for each row
394
create trigger trg2 after insert on t1 for each row set @a:= 1|
396
insert into t1 (i) select * from t2|
405
create table t1 (i int, j int, k int);
406
create trigger trg1 before insert on t1 for each row set new.k = new.i;
407
create trigger trg2 after insert on t1 for each row set @b:= "Fired";
409
load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, i);
410
select *, @b from t1;
415
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, j);
416
select *, @b from t1;
424
create table t1 (i int, at int, k int, key(k)) engine=myisam;
425
create table t2 (i int);
426
insert into t1 values (1, 1, 1);
427
insert into t2 values (1), (2), (3);
428
create trigger ai after insert on t1 for each row set @a:= new.at;
429
create trigger au after update on t1 for each row set @a:= new.at;
430
create trigger ad after delete on t1 for each row set @a:= old.at;
431
alter table t1 drop column at;
435
insert into t1 values (2, 1);
436
ERROR 42S22: Unknown column 'at' in 'NEW'
441
update t1 set k = 2 where i = 2;
442
ERROR 42S22: Unknown column 'at' in 'NEW'
447
delete from t1 where i = 2;
448
ERROR 42S22: Unknown column 'at' in 'OLD'
452
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k);
453
ERROR 42S22: Unknown column 'at' in 'NEW'
458
insert into t1 select 3, 3;
459
ERROR 42S22: Unknown column 'at' in 'NEW'
465
update t1, t2 set k = k + 10 where t1.i = t2.i;
466
ERROR 42S22: Unknown column 'at' in 'NEW'
472
update t1, t2 set k = k + 10 where t1.i = t2.i and k < 3;
473
ERROR 42S22: Unknown column 'at' in 'NEW'
479
delete t1, t2 from t1 straight_join t2 where t1.i = t2.i;
480
ERROR 42S22: Unknown column 'at' in 'OLD'
485
delete t2, t1 from t2 straight_join t1 where t1.i = t2.i;
486
ERROR 42S22: Unknown column 'at' in 'OLD'
490
alter table t1 add primary key (i);
491
insert into t1 values (3, 4) on duplicate key update k= k + 10;
492
ERROR 42S22: Unknown column 'at' in 'NEW'
496
replace into t1 values (3, 3);
497
ERROR 42S22: Unknown column 'at' in 'OLD'
501
create table t1 (i int, bt int, k int, key(k)) engine=myisam;
502
create table t2 (i int);
503
insert into t1 values (1, 1, 1), (2, 2, 2);
504
insert into t2 values (1), (2), (3);
505
create trigger bi before insert on t1 for each row set @a:= new.bt;
506
create trigger bu before update on t1 for each row set @a:= new.bt;
507
create trigger bd before delete on t1 for each row set @a:= old.bt;
508
alter table t1 drop column bt;
509
insert into t1 values (3, 3);
510
ERROR 42S22: Unknown column 'bt' in 'NEW'
516
ERROR 42S22: Unknown column 'bt' in 'NEW'
522
ERROR 42S22: Unknown column 'bt' in 'OLD'
527
load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by '' enclosed by '' (i, k);
528
ERROR 42S22: Unknown column 'bt' in 'NEW'
533
insert into t1 select 3, 3;
534
ERROR 42S22: Unknown column 'bt' in 'NEW'
539
update t1, t2 set k = k + 10 where t1.i = t2.i;
540
ERROR 42S22: Unknown column 'bt' in 'NEW'
545
update t1, t2 set k = k + 10 where t1.i = t2.i and k < 2;
546
ERROR 42S22: Unknown column 'bt' in 'NEW'
551
delete t1, t2 from t1 straight_join t2 where t1.i = t2.i;
552
ERROR 42S22: Unknown column 'bt' in 'OLD'
557
delete t2, t1 from t2 straight_join t1 where t1.i = t2.i;
558
ERROR 42S22: Unknown column 'bt' in 'OLD'
563
alter table t1 add primary key (i);
565
insert into t1 values (2, 4) on duplicate key update k= k + 10;
566
ERROR 42S22: Unknown column 'bt' in 'NEW'
571
replace into t1 values (2, 4);
572
ERROR 42S22: Unknown column 'bt' in 'OLD'
578
drop function if exists bug5893;
579
create table t1 (col1 int, col2 int);
580
insert into t1 values (1, 2);
581
create function bug5893 () returns int return 5;
582
create trigger t1_bu before update on t1 for each row set new.col1= bug5893();
583
drop function bug5893;
584
update t1 set col2 = 4;
585
ERROR 42000: FUNCTION test.bug5893 does not exist
589
create table t1 ("t1 column" int);
590
create trigger t1_bi before insert on t1 for each row set new."t1 column" = 5;
592
insert into t1 values (0);
593
create trigger t1_af after insert on t1 for each row set @a=10;
594
insert into t1 values (0);
603
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
604
t1_bi INSERT t1 set new."t1 column" = 5 BEFORE # REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
605
t1_af INSERT t1 set @a=10 AFTER # root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
607
set sql_mode="traditional";
608
create table t1 (a date);
609
insert into t1 values ('2004-01-00');
610
ERROR 22007: Incorrect date value: '2004-01-00' for column 'a' at row 1
612
create trigger t1_bi before insert on t1 for each row set new.a = '2004-01-00';
613
set sql_mode="traditional";
614
insert into t1 values ('2004-01-01');
618
set sql_mode=default;
619
show create table t1;
621
t1 CREATE TABLE `t1` (
622
`a` date DEFAULT NULL
623
) ENGINE=MyISAM DEFAULT CHARSET=latin1
625
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
626
t1_bi INSERT t1 set new.a = '2004-01-00' BEFORE # root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
628
create table t1 (id int);
629
create trigger t1_ai after insert on t1 for each row reset query cache;
630
ERROR 0A000: RESET is not allowed in stored function or trigger
631
create trigger t1_ai after insert on t1 for each row reset master;
632
ERROR 0A000: RESET is not allowed in stored function or trigger
633
create trigger t1_ai after insert on t1 for each row reset slave;
634
ERROR 0A000: RESET is not allowed in stored function or trigger
635
create trigger t1_ai after insert on t1 for each row flush hosts;
636
ERROR 0A000: FLUSH is not allowed in stored function or trigger
637
create trigger t1_ai after insert on t1 for each row flush tables with read lock;
638
ERROR 0A000: FLUSH is not allowed in stored function or trigger
639
create trigger t1_ai after insert on t1 for each row flush logs;
640
ERROR 0A000: FLUSH is not allowed in stored function or trigger
641
create trigger t1_ai after insert on t1 for each row flush status;
642
ERROR 0A000: FLUSH is not allowed in stored function or trigger
643
create trigger t1_ai after insert on t1 for each row flush slave;
644
ERROR 0A000: FLUSH is not allowed in stored function or trigger
645
create trigger t1_ai after insert on t1 for each row flush master;
646
ERROR 0A000: FLUSH is not allowed in stored function or trigger
647
create trigger t1_ai after insert on t1 for each row flush des_key_file;
648
ERROR 0A000: FLUSH is not allowed in stored function or trigger
649
create trigger t1_ai after insert on t1 for each row flush user_resources;
650
ERROR 0A000: FLUSH is not allowed in stored function or trigger
651
create trigger t1_ai after insert on t1 for each row flush tables;
652
ERROR 0A000: FLUSH is not allowed in stored function or trigger
653
create trigger t1_ai after insert on t1 for each row flush privileges;
654
ERROR 0A000: FLUSH is not allowed in stored function or trigger
655
drop procedure if exists p1;
656
create trigger t1_ai after insert on t1 for each row call p1();
657
create procedure p1() flush tables;
658
insert into t1 values (0);
659
ERROR 0A000: FLUSH is not allowed in stored function or trigger
661
create procedure p1() reset query cache;
662
insert into t1 values (0);
663
ERROR 0A000: RESET is not allowed in stored function or trigger
665
create procedure p1() reset master;
666
insert into t1 values (0);
667
ERROR 0A000: RESET is not allowed in stored function or trigger
669
create procedure p1() reset slave;
670
insert into t1 values (0);
671
ERROR 0A000: RESET is not allowed in stored function or trigger
673
create procedure p1() flush hosts;
674
insert into t1 values (0);
675
ERROR 0A000: FLUSH is not allowed in stored function or trigger
677
create procedure p1() flush privileges;
678
insert into t1 values (0);
679
ERROR 0A000: FLUSH is not allowed in stored function or trigger
681
create procedure p1() flush tables with read lock;
682
insert into t1 values (0);
683
ERROR 0A000: FLUSH is not allowed in stored function or trigger
685
create procedure p1() flush tables;
686
insert into t1 values (0);
687
ERROR 0A000: FLUSH is not allowed in stored function or trigger
689
create procedure p1() flush logs;
690
insert into t1 values (0);
691
ERROR 0A000: FLUSH is not allowed in stored function or trigger
693
create procedure p1() flush status;
694
insert into t1 values (0);
695
ERROR 0A000: FLUSH is not allowed in stored function or trigger
697
create procedure p1() flush slave;
698
insert into t1 values (0);
699
ERROR 0A000: FLUSH is not allowed in stored function or trigger
701
create procedure p1() flush master;
702
insert into t1 values (0);
703
ERROR 0A000: FLUSH is not allowed in stored function or trigger
705
create procedure p1() flush des_key_file;
706
insert into t1 values (0);
707
ERROR 0A000: FLUSH is not allowed in stored function or trigger
709
create procedure p1() flush user_resources;
710
insert into t1 values (0);
711
ERROR 0A000: FLUSH is not allowed in stored function or trigger
714
create table t1 (id int, data int, username varchar(16));
715
insert into t1 (id, data) values (1, 0);
716
create trigger t1_whoupdated before update on t1 for each row
718
declare user varchar(32);
720
select user() into user;
721
set NEW.username = user;
722
select count(*) from ((select 1) union (select 2)) as d1 into i;
724
update t1 set data = 1;
725
update t1 set data = 2;
727
create table t1 (c1 int, c2 datetime);
728
create trigger tr1 before insert on t1 for each row
730
set new.c2= '2004-04-01';
733
ERROR 0A000: Not allowed to return a result set from a trigger
734
insert into t1 (c1) values (1),(2),(3);
740
drop procedure if exists bug11587;
741
create procedure bug11587(x char(16))
744
select "hello again";
746
create trigger tr1 before insert on t1 for each row
749
set new.c2= '2004-04-02';
751
insert into t1 (c1) values (4),(5),(6);
752
ERROR 0A000: Not allowed to return a result set from a trigger
758
drop procedure bug11587;
760
create table t1 (f1 integer);
761
create table t2 (f2 integer);
762
create trigger t1_ai after insert on t1
763
for each row insert into t2 values (new.f1+1);
764
create trigger t2_ai after insert on t2
765
for each row insert into t1 values (new.f2+1);
766
set @SAVE_SP_RECURSION_LEVELS=@@max_sp_recursion_depth;
767
set @@max_sp_recursion_depth=100;
768
insert into t1 values (1);
769
ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
770
set @@max_sp_recursion_depth=@SAVE_SP_RECURSION_LEVELS;
779
create trigger t1_bu before update on t1
780
for each row insert into t1 values (2);
781
update t1 set f1= 10;
782
ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
787
create trigger t1_bu before update on t1
788
for each row delete from t1 where f1=new.f1;
789
update t1 set f1= 10;
790
ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
795
create trigger t1_bi before insert on t1
796
for each row set new.f1=(select sum(f1) from t1);
797
insert into t1 values (3);
804
create table t1 (id int);
805
create table t2 (id int);
806
create trigger t1_bi before insert on t1 for each row insert into t2 values (new.id);
807
prepare stmt1 from "insert into t1 values (10)";
808
create procedure p1() insert into t1 values (10);
813
deallocate prepare stmt1;
815
create table t3 (id int);
816
create trigger t1_bi after insert on t1 for each row insert into t2 values (new.id);
817
prepare stmt1 from "insert into t1 values (10)";
818
create procedure p1() insert into t1 values (10);
821
create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id);
824
ERROR 42S02: Table 'test.t3' doesn't exist
825
deallocate prepare stmt1;
827
drop table t1, t2, t3;
828
create table t1 (a int);
829
CREATE PROCEDURE `p1`()
831
insert into t1 values (1);
833
create trigger trg before insert on t1 for each row
835
declare done int default 0;
841
create trigger t1_bi before insert on test.t1 for each row set @a:=0;
842
ERROR 3D000: No database selected
843
create trigger test.t1_bi before insert on t1 for each row set @a:=0;
844
ERROR 42S02: Table 'test.t1' doesn't exist
846
ERROR 3D000: No database selected
847
create table t1 (id int);
848
create trigger t1_bi before insert on t1 for each row set @a:=new.id;
849
create trigger t1_ai after insert on test.t1 for each row set @b:=new.id;
850
insert into t1 values (101);
854
select trigger_schema, trigger_name, event_object_schema,
855
event_object_table, action_statement from information_schema.triggers
856
where event_object_schema = 'test';
857
trigger_schema trigger_name event_object_schema event_object_table action_statement
858
test t1_bi test t1 set @a:=new.id
859
test t1_ai test t1 set @b:=new.id
860
rename table t1 to t2;
861
insert into t2 values (102);
865
select trigger_schema, trigger_name, event_object_schema,
866
event_object_table, action_statement from information_schema.triggers
867
where event_object_schema = 'test';
868
trigger_schema trigger_name event_object_schema event_object_table action_statement
869
test t1_bi test t2 set @a:=new.id
870
test t1_ai test t2 set @b:=new.id
871
alter table t2 rename to t3;
872
insert into t3 values (103);
876
select trigger_schema, trigger_name, event_object_schema,
877
event_object_table, action_statement from information_schema.triggers
878
where event_object_schema = 'test';
879
trigger_schema trigger_name event_object_schema event_object_table action_statement
880
test t1_bi test t3 set @a:=new.id
881
test t1_ai test t3 set @b:=new.id
882
alter table t3 rename to t4, add column val int default 0;
883
insert into t4 values (104, 1);
887
select trigger_schema, trigger_name, event_object_schema,
888
event_object_table, action_statement from information_schema.triggers
889
where event_object_schema = 'test';
890
trigger_schema trigger_name event_object_schema event_object_table action_statement
891
test t1_bi test t4 set @a:=new.id
892
test t1_ai test t4 set @b:=new.id
896
create database mysqltest;
898
create table t1 (id int);
899
create trigger t1_bi before insert on t1 for each row set @a:=new.id;
900
insert into t1 values (101);
904
select trigger_schema, trigger_name, event_object_schema,
905
event_object_table, action_statement from information_schema.triggers
906
where event_object_schema = 'test' or event_object_schema = 'mysqltest';
907
trigger_schema trigger_name event_object_schema event_object_table action_statement
908
mysqltest t1_bi mysqltest t1 set @a:=new.id
909
rename table t1 to test.t2;
910
ERROR HY000: Trigger in wrong schema
911
insert into t1 values (102);
915
select trigger_schema, trigger_name, event_object_schema,
916
event_object_table, action_statement from information_schema.triggers
917
where event_object_schema = 'test' or event_object_schema = 'mysqltest';
918
trigger_schema trigger_name event_object_schema event_object_table action_statement
919
mysqltest t1_bi mysqltest t1 set @a:=new.id
920
drop trigger test.t1_bi;
921
ERROR HY000: Trigger does not exist
922
alter table t1 rename to test.t1;
923
ERROR HY000: Trigger in wrong schema
924
insert into t1 values (103);
928
select trigger_schema, trigger_name, event_object_schema,
929
event_object_table, action_statement from information_schema.triggers
930
where event_object_schema = 'test' or event_object_schema = 'mysqltest';
931
trigger_schema trigger_name event_object_schema event_object_table action_statement
932
mysqltest t1_bi mysqltest t1 set @a:=new.id
933
drop trigger test.t1_bi;
934
ERROR HY000: Trigger does not exist
935
alter table t1 rename to test.t1, add column val int default 0;
936
ERROR HY000: Trigger in wrong schema
937
insert into t1 values (104);
941
select trigger_schema, trigger_name, event_object_schema,
942
event_object_table, action_statement from information_schema.triggers
943
where event_object_schema = 'test' or event_object_schema = 'mysqltest';
944
trigger_schema trigger_name event_object_schema event_object_table action_statement
945
mysqltest t1_bi mysqltest t1 set @a:=new.id
946
show create table t1;
948
t1 CREATE TABLE `t1` (
949
`id` int(11) DEFAULT NULL
950
) ENGINE=MyISAM DEFAULT CHARSET=latin1
951
drop trigger test.t1_bi;
952
ERROR HY000: Trigger does not exist
955
drop database mysqltest;
957
create table t1 (id int);
958
create trigger t1_bi before insert on t1 for each row set @a:=new.id;
959
create trigger t1_ai after insert on t1 for each row set @b:=new.id;
960
insert into t1 values (101);
964
select trigger_schema, trigger_name, event_object_schema,
965
event_object_table, action_statement from information_schema.triggers
966
where event_object_schema = 'test';
967
trigger_schema trigger_name event_object_schema event_object_table action_statement
968
test t1_bi test t1 set @a:=new.id
969
test t1_ai test t1 set @b:=new.id
970
rename table t1 to t2;
971
ERROR HY000: Can't create/write to file './test/t1_ai.TRN~' (Errcode: 13)
972
insert into t1 values (102);
976
select trigger_schema, trigger_name, event_object_schema,
977
event_object_table, action_statement from information_schema.triggers
978
where event_object_schema = 'test';
979
trigger_schema trigger_name event_object_schema event_object_table action_statement
980
test t1_bi test t1 set @a:=new.id
981
test t1_ai test t1 set @b:=new.id
985
create table t1 (i int);
986
create trigger t1_bi before insert on t1 for each row return 0;
987
ERROR 42000: RETURN is only allowed in a FUNCTION
988
insert into t1 values (1);
990
create table t1 (a varchar(64), b int);
991
create table t2 like t1;
992
create trigger t1_ai after insert on t1 for each row
993
set @a:= (select max(a) from t1);
994
insert into t1 (a) values
995
("Twas"),("brillig"),("and"),("the"),("slithy"),("toves"),
996
("Did"),("gyre"),("and"),("gimble"),("in"),("the"),("wabe");
997
create trigger t2_ai after insert on t2 for each row
998
set @a:= (select max(a) from t2);
999
insert into t2 select * from t1;
1000
load data infile '../../std_data/words.dat' into table t1 (a);
1003
create function f1() returns int return (select max(b) from t1);
1004
insert into t1 values
1005
("All",f1()),("mimsy",f1()),("were",f1()),("the",f1()),("borogoves",f1()),
1006
("And",f1()),("the",f1()),("mome", f1()),("raths",f1()),("outgrabe",f1());
1007
create function f2() returns int return (select max(b) from t2);
1008
insert into t2 select a, f2() from t1;
1009
load data infile '../../std_data/words.dat' into table t1 (a) set b:= f1();
1013
create table t1(i int not null, j int not null, n numeric(15,2), primary key(i,j));
1014
create table t2(i int not null, n numeric(15,2), primary key(i));
1015
create trigger t1_ai after insert on t1 for each row
1017
declare sn numeric(15,2);
1018
select sum(n) into sn from t1 where i=new.i;
1019
replace into t2 values(new.i, sn);
1021
insert into t1 values
1022
(1,1,10.00),(1,2,10.00),(1,3,10.00),(1,4,10.00),(1,5,10.00),
1023
(1,6,10.00),(1,7,10.00),(1,8,10.00),(1,9,10.00),(1,10,10.00),
1024
(1,11,10.00),(1,12,10.00),(1,13,10.00),(1,14,10.00),(1,15,10.00);
1046
DROP TABLE IF EXISTS t1;
1051
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
1052
SET NEW.trigger_conn_id = CONNECTION_ID();
1053
INSERT INTO t1 (conn_id, trigger_conn_id) VALUES (CONNECTION_ID(), -1);
1054
INSERT INTO t1 (conn_id, trigger_conn_id) VALUES (CONNECTION_ID(), -1);
1055
SELECT * FROM t1 WHERE conn_id != trigger_conn_id;
1056
conn_id trigger_conn_id
1059
DROP TABLE IF EXISTS t1;
1060
CREATE TABLE t1 (i1 INT);
1061
SET @save_sql_mode=@@sql_mode;
1063
CREATE TRIGGER t1_ai AFTER INSERT ON t1 FOR EACH ROW
1065
SET SQL_MODE='traditional';
1066
CREATE TRIGGER t1_au AFTER UPDATE ON t1 FOR EACH ROW
1069
INSERT INTO t1 VALUES (@x);
1074
UPDATE t1 SET i1 = @x;
1076
Error 1365 Division by 0
1082
INSERT INTO t1 VALUES (@x);
1087
UPDATE t1 SET i1 = @x;
1089
Error 1365 Division by 0
1090
Error 1365 Division by 0
1094
SET @@sql_mode=@save_sql_mode;
1098
DROP TABLE IF EXISTS t1;
1099
DROP PROCEDURE IF EXISTS p1;
1100
DROP PROCEDURE IF EXISTS p2;
1101
CREATE TABLE t1 (i1 INT);
1102
INSERT INTO t1 VALUES (3);
1103
CREATE PROCEDURE p1(OUT i1 INT) DETERMINISTIC NO SQL SET i1 = 5;
1104
CREATE PROCEDURE p2(INOUT i1 INT) DETERMINISTIC NO SQL SET i1 = i1 * 7;
1105
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
1110
UPDATE t1 SET i1 = 11 WHERE i1 = 3;
1114
INSERT INTO t1 VALUES (13);
1115
CREATE PROCEDURE p1(OUT i1 INT) DETERMINISTIC NO SQL SET @a = 17;
1116
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
1118
UPDATE t1 SET i1 = 19 WHERE i1 = 13;
1119
ERROR 42000: OUT or INOUT argument 1 for routine test.p1 is not a variable or NEW pseudo-variable in BEFORE trigger
1122
INSERT INTO t1 VALUES (23);
1123
CREATE PROCEDURE p1(INOUT i1 INT) DETERMINISTIC NO SQL SET @a = i1 * 29;
1124
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
1126
UPDATE t1 SET i1 = 31 WHERE i1 = 23;
1127
ERROR 42000: OUT or INOUT argument 1 for routine test.p1 is not a variable or NEW pseudo-variable in BEFORE trigger
1130
INSERT INTO t1 VALUES (37);
1131
CREATE PROCEDURE p1(OUT i1 INT) DETERMINISTIC NO SQL SET @a = 41;
1132
CREATE TRIGGER t1_au AFTER UPDATE ON t1 FOR EACH ROW
1134
UPDATE t1 SET i1 = 43 WHERE i1 = 37;
1135
ERROR 42000: OUT or INOUT argument 1 for routine test.p1 is not a variable or NEW pseudo-variable in BEFORE trigger
1138
INSERT INTO t1 VALUES (47);
1139
CREATE PROCEDURE p1(INOUT i1 INT) DETERMINISTIC NO SQL SET @a = i1 * 49;
1140
CREATE TRIGGER t1_au AFTER UPDATE ON t1 FOR EACH ROW
1142
UPDATE t1 SET i1 = 51 WHERE i1 = 47;
1143
ERROR 42000: OUT or INOUT argument 1 for routine test.p1 is not a variable or NEW pseudo-variable in BEFORE trigger
1154
create trigger wont_work after update on mysql.user for each row
1158
ERROR HY000: Triggers can not be created on system tables
1160
create trigger wont_work after update on event for each row
1164
ERROR HY000: Triggers can not be created on system tables
1166
DROP TABLE IF EXISTS t1;
1167
DROP TABLE IF EXISTS t2;
1168
CREATE TABLE t1(c INT);
1169
CREATE TABLE t2(c INT);
1170
CREATE DEFINER=1234567890abcdefGHIKL@localhost
1171
TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a = 1;
1172
ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
1173
CREATE DEFINER=some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY
1174
TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW SET @a = 2;
1175
ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
1178
drop table if exists t1;
1179
drop table if exists t2;
1180
drop table if exists t3;
1181
drop table if exists t4;
1182
SET @save_sql_mode=@@sql_mode;
1183
SET sql_mode='TRADITIONAL'|
1184
create table t1 (id int(10) not null primary key, v int(10) )|
1185
create table t2 (id int(10) not null primary key, v int(10) )|
1186
create table t3 (id int(10) not null primary key, v int(10) )|
1187
create table t4 (c int)|
1188
create trigger t4_bi before insert on t4 for each row set @t4_bi_called:=1|
1189
create trigger t4_bu before update on t4 for each row set @t4_bu_called:=1|
1190
insert into t1 values(10, 10)|
1193
Error 1365 Division by 0
1198
Error 1365 Division by 0
1199
create trigger t1_bi before insert on t1 for each row set @a:=1/0|
1200
insert into t1 values(20, 20)|
1202
Error 1365 Division by 0
1204
create trigger t1_bi before insert on t1 for each row
1206
insert into t2 values (new.id, new.v);
1207
update t2 set v=v+1 where id= new.id;
1208
replace t3 values (new.id, 0);
1209
update t2, t3 set t2.v=new.v, t3.v=new.v where t2.id=t3.id;
1210
create temporary table t5 select * from t1;
1212
insert into t5 select * from t1;
1213
insert into t4 values (0);
1214
set @check= (select count(*) from t5);
1215
update t4 set c= @check;
1216
drop temporary table t5;
1219
set @check=0, @t4_bi_called=0, @t4_bu_called=0|
1220
insert into t1 values(30, 30)|
1222
Error 1365 Division by 0
1223
select @check, @t4_bi_called, @t4_bu_called|
1224
@check @t4_bi_called @t4_bu_called
1226
SET @@sql_mode=@save_sql_mode;
1231
drop table if exists t1;
1232
create table t1 (i int, j int key);
1233
insert into t1 values (1,1), (2,2), (3,3);
1234
create trigger t1_bu before update on t1 for each row
1235
set new.j = new.j + 10;
1236
update t1 set i= i+ 10 where j > 2;
1243
CREATE TABLE t1 (a INT PRIMARY KEY);
1244
CREATE TABLE t2 (a INT PRIMARY KEY);
1245
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
1246
CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW
1247
INSERT INTO t2 VALUES (OLD.a);
1250
SHOW STATUS LIKE 'handler_delete';
1253
SELECT COUNT(*) FROM t2;
1256
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
1260
SHOW STATUS LIKE 'handler_delete';
1263
SELECT COUNT(*) FROM t2;
1266
DROP TRIGGER trg_t1;
1268
drop table if exists t1;
1269
drop function if exists f1;
1270
create table t1 (i int);
1271
create function f1() returns int return 10;
1272
create trigger t1_bi before insert on t1 for each row set @a:= f1() + 10;
1273
insert into t1 values ();
1277
insert into t1 values ();
1283
drop table if exists t1;
1284
create table t1(a int, b varchar(50));
1285
drop trigger not_a_trigger;
1286
ERROR HY000: Trigger does not exist
1287
drop trigger if exists not_a_trigger;
1289
Note 1360 Trigger does not exist
1290
create trigger t1_bi before insert on t1
1291
for each row set NEW.b := "In trigger t1_bi";
1292
insert into t1 values (1, "a");
1293
drop trigger if exists t1_bi;
1294
insert into t1 values (2, "b");
1295
drop trigger if exists t1_bi;
1297
Note 1360 Trigger does not exist
1298
insert into t1 values (3, "c");
1306
id int NOT NULL DEFAULT '0',
1307
a varchar(10) NOT NULL,
1310
d timestamp NOT NULL,
1314
fubar_id int unsigned NOT NULL DEFAULT '0',
1315
last_change_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
1316
PRIMARY KEY (fubar_id)
1318
CREATE TRIGGER fubar_change
1322
INSERT INTO t2 (fubar_id, last_change_time)
1323
SELECT DISTINCT NEW.id AS fubar_id, NOW() AS last_change_time
1324
FROM t1 WHERE (id = NEW.id) AND (OLD.c != NEW.c)
1325
ON DUPLICATE KEY UPDATE
1327
IF((fubar_id = NEW.id)AND(OLD.c != NEW.c),NOW(),last_change_time);
1330
INSERT INTO t1 (id,a, b,c,d) VALUES
1331
(1,'a','b','c',now()),(2,'a','b','c',now());
1332
UPDATE t1 SET c='Bang!' WHERE id=1;
1333
SELECT fubar_id FROM t2;
1337
DROP TABLE IF EXISTS bug21825_A;
1338
DROP TABLE IF EXISTS bug21825_B;
1339
CREATE TABLE bug21825_A (id int(10));
1340
CREATE TABLE bug21825_B (id int(10));
1341
CREATE TRIGGER trgA AFTER INSERT ON bug21825_A
1344
INSERT INTO bug21825_B (id) values (1);
1346
INSERT INTO bug21825_A (id) VALUES (10);
1347
INSERT INTO bug21825_A (id) VALUES (20);
1348
DROP TABLE bug21825_B;
1349
DELETE FROM bug21825_A WHERE id = 20;
1350
DROP TABLE bug21825_A;
1351
DROP TABLE IF EXISTS bug22580_t1;
1352
DROP PROCEDURE IF EXISTS bug22580_proc_1;
1353
DROP PROCEDURE IF EXISTS bug22580_proc_2;
1354
CREATE TABLE bug22580_t1 (a INT, b INT);
1355
CREATE PROCEDURE bug22580_proc_2()
1357
DROP TABLE IF EXISTS bug22580_tmp;
1358
CREATE TEMPORARY TABLE bug22580_tmp (a INT);
1359
DROP TABLE bug22580_tmp;
1361
CREATE PROCEDURE bug22580_proc_1()
1363
CALL bug22580_proc_2();
1365
CREATE TRIGGER t1bu BEFORE UPDATE ON bug22580_t1
1368
CALL bug22580_proc_1();
1370
INSERT INTO bug22580_t1 VALUES (1,1);
1371
DROP TABLE bug22580_t1;
1372
DROP PROCEDURE bug22580_proc_1;
1373
DROP PROCEDURE bug22580_proc_2;
1374
DROP TRIGGER IF EXISTS trg27006_a_update;
1375
DROP TRIGGER IF EXISTS trg27006_a_insert;
1377
`id` int(10) unsigned NOT NULL auto_increment,
1378
`val` varchar(10) NOT NULL,
1381
CREATE TABLE t2 like t1;
1382
CREATE TRIGGER trg27006_a_insert AFTER INSERT ON t1 FOR EACH ROW
1384
insert into t2 values (NULL,new.val);
1386
CREATE TRIGGER trg27006_a_update AFTER UPDATE ON t1 FOR EACH ROW
1388
insert into t2 values (NULL,new.val);
1390
INSERT INTO t1(val) VALUES ('test1'),('test2');
1399
INSERT INTO t1 VALUES (2,'test2') ON DUPLICATE KEY UPDATE val=VALUES(val);
1400
INSERT INTO t1 VALUES (2,'test3') ON DUPLICATE KEY UPDATE val=VALUES(val);
1401
INSERT INTO t1 VALUES (3,'test4') ON DUPLICATE KEY UPDATE val=VALUES(val);
1413
DROP TRIGGER trg27006_a_insert;
1414
DROP TRIGGER trg27006_a_update;
1416
drop table if exists t1, t2, t3;
1417
create table t1 (i int);
1418
create trigger t1_bi before insert on t1 for each row set new.i = 7;
1419
create trigger t1_ai after insert on t1 for each row set @a := 7;
1420
create table t2 (j int);
1421
insert into t2 values (1), (2);
1423
create table if not exists t1 select * from t2;
1425
Note 1050 Table 't1' already exists
1435
create table t3 (isave int);
1436
create trigger t1_bi before insert on t1 for each row insert into t3 values (new.i);
1437
create table if not exists t1 select * from t2;
1439
Note 1050 Table 't1' already exists
1450
drop table t1, t2, t3;
1451
CREATE TABLE t1 (id INTEGER);
1452
CREATE TABLE t2 (id INTEGER);
1453
INSERT INTO t2 VALUES (1),(2);
1454
CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW
1455
INSERT INTO t2 VALUES (new.id);
1456
SELECT GET_LOCK('B26162',120);
1457
GET_LOCK('B26162',120)
1459
SELECT 'rl_acquirer', GET_LOCK('B26162',120), id FROM t2 WHERE id = 1;
1460
SET SESSION LOW_PRIORITY_UPDATES=1;
1461
SET GLOBAL LOW_PRIORITY_UPDATES=1;
1462
INSERT INTO t1 VALUES (5);
1463
SELECT 'rl_contender', id FROM t2 WHERE id > 1;
1464
SELECT RELEASE_LOCK('B26162');
1465
RELEASE_LOCK('B26162')
1467
rl_acquirer GET_LOCK('B26162',120) id
1469
SELECT RELEASE_LOCK('B26162');
1470
RELEASE_LOCK('B26162')
1474
DROP TRIGGER t1_test;
1476
SET SESSION LOW_PRIORITY_UPDATES=DEFAULT;
1477
SET GLOBAL LOW_PRIORITY_UPDATES=DEFAULT;
1479
Bug#28502 Triggers that update another innodb table will block
1480
on X lock unnecessarily
1482
Ensure we do not open and lock tables for triggers we do not fire.
1484
drop table if exists t1, t2;
1485
drop trigger if exists trg_bug28502_au;
1486
create table t1 (id int, count int);
1487
create table t2 (id int);
1488
create trigger trg_bug28502_au before update on t2
1491
if (new.id is not null) then
1492
update t1 set count= count + 1 where id = old.id;
1495
insert into t1 (id, count) values (1, 0);
1496
lock table t1 write;
1497
insert into t2 set id=1;
1499
update t2 set id=1 where id=1;
1508
Additionally, provide test coverage for triggers and
1509
all MySQL data changing commands.
1511
drop table if exists t1, t2, t1_op_log;
1512
drop view if exists v1;
1513
drop trigger if exists trg_bug28502_bi;
1514
drop trigger if exists trg_bug28502_ai;
1515
drop trigger if exists trg_bug28502_bu;
1516
drop trigger if exists trg_bug28502_au;
1517
drop trigger if exists trg_bug28502_bd;
1518
drop trigger if exists trg_bug28502_ad;
1519
create table t1 (id int primary key auto_increment, operation varchar(255));
1520
create table t2 (id int primary key);
1521
create table t1_op_log(operation varchar(255));
1522
create view v1 as select * from t1;
1523
create trigger trg_bug28502_bi before insert on t1
1525
insert into t1_op_log (operation)
1526
values (concat("Before INSERT, new=", new.operation));
1527
create trigger trg_bug28502_ai after insert on t1
1529
insert into t1_op_log (operation)
1530
values (concat("After INSERT, new=", new.operation));
1531
create trigger trg_bug28502_bu before update on t1
1533
insert into t1_op_log (operation)
1534
values (concat("Before UPDATE, new=", new.operation,
1535
", old=", old.operation));
1536
create trigger trg_bug28502_au after update on t1
1538
insert into t1_op_log (operation)
1539
values (concat("After UPDATE, new=", new.operation,
1540
", old=", old.operation));
1541
create trigger trg_bug28502_bd before delete on t1
1543
insert into t1_op_log (operation)
1544
values (concat("Before DELETE, old=", old.operation));
1545
create trigger trg_bug28502_ad after delete on t1
1547
insert into t1_op_log (operation)
1548
values (concat("After DELETE, old=", old.operation));
1549
insert into t1 (operation) values ("INSERT");
1550
set @id=last_insert_id();
1554
select * from t1_op_log;
1556
Before INSERT, new=INSERT
1557
After INSERT, new=INSERT
1559
update t1 set operation="UPDATE" where id=@id;
1563
select * from t1_op_log;
1565
Before UPDATE, new=UPDATE, old=INSERT
1566
After UPDATE, new=UPDATE, old=INSERT
1568
delete from t1 where id=@id;
1571
select * from t1_op_log;
1573
Before DELETE, old=UPDATE
1574
After DELETE, old=UPDATE
1577
insert into t1 (id, operation) values
1578
(NULL, "INSERT ON DUPLICATE KEY UPDATE, inserting a new key")
1579
on duplicate key update id=NULL, operation="Should never happen";
1580
set @id=last_insert_id();
1583
1 INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1584
select * from t1_op_log;
1586
Before INSERT, new=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1587
After INSERT, new=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1589
insert into t1 (id, operation) values
1590
(@id, "INSERT ON DUPLICATE KEY UPDATE, the key value is the same")
1591
on duplicate key update id=NULL,
1592
operation="INSERT ON DUPLICATE KEY UPDATE, updating the duplicate";
1595
0 INSERT ON DUPLICATE KEY UPDATE, updating the duplicate
1596
select * from t1_op_log;
1598
Before INSERT, new=INSERT ON DUPLICATE KEY UPDATE, the key value is the same
1599
Before UPDATE, new=INSERT ON DUPLICATE KEY UPDATE, updating the duplicate, old=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1600
After UPDATE, new=INSERT ON DUPLICATE KEY UPDATE, updating the duplicate, old=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1603
replace into t1 values (NULL, "REPLACE, inserting a new key");
1604
set @id=last_insert_id();
1607
1 REPLACE, inserting a new key
1608
select * from t1_op_log;
1610
Before INSERT, new=REPLACE, inserting a new key
1611
After INSERT, new=REPLACE, inserting a new key
1613
replace into t1 values (@id, "REPLACE, deleting the duplicate");
1616
1 REPLACE, deleting the duplicate
1617
select * from t1_op_log;
1619
Before INSERT, new=REPLACE, deleting the duplicate
1620
Before DELETE, old=REPLACE, inserting a new key
1621
After DELETE, old=REPLACE, inserting a new key
1622
After INSERT, new=REPLACE, deleting the duplicate
1625
create table if not exists t1
1626
select NULL, "CREATE TABLE ... SELECT, inserting a new key";
1628
Note 1050 Table 't1' already exists
1629
set @id=last_insert_id();
1632
1 CREATE TABLE ... SELECT, inserting a new key
1633
select * from t1_op_log;
1635
Before INSERT, new=CREATE TABLE ... SELECT, inserting a new key
1636
After INSERT, new=CREATE TABLE ... SELECT, inserting a new key
1638
create table if not exists t1 replace
1639
select @id, "CREATE TABLE ... REPLACE SELECT, deleting a duplicate key";
1641
Note 1050 Table 't1' already exists
1644
1 CREATE TABLE ... REPLACE SELECT, deleting a duplicate key
1645
select * from t1_op_log;
1647
Before INSERT, new=CREATE TABLE ... REPLACE SELECT, deleting a duplicate key
1648
Before DELETE, old=CREATE TABLE ... SELECT, inserting a new key
1649
After DELETE, old=CREATE TABLE ... SELECT, inserting a new key
1650
After INSERT, new=CREATE TABLE ... REPLACE SELECT, deleting a duplicate key
1653
insert into t1 (id, operation)
1654
select NULL, "INSERT ... SELECT, inserting a new key";
1655
set @id=last_insert_id();
1658
1 INSERT ... SELECT, inserting a new key
1659
select * from t1_op_log;
1661
Before INSERT, new=INSERT ... SELECT, inserting a new key
1662
After INSERT, new=INSERT ... SELECT, inserting a new key
1664
insert into t1 (id, operation)
1666
"INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate"
1667
on duplicate key update id=NULL,
1668
operation="INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate";
1671
0 INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate
1672
select * from t1_op_log;
1674
Before INSERT, new=INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate
1675
Before UPDATE, new=INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate, old=INSERT ... SELECT, inserting a new key
1676
After UPDATE, new=INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate, old=INSERT ... SELECT, inserting a new key
1679
replace into t1 (id, operation)
1680
select NULL, "REPLACE ... SELECT, inserting a new key";
1681
set @id=last_insert_id();
1684
1 REPLACE ... SELECT, inserting a new key
1685
select * from t1_op_log;
1687
Before INSERT, new=REPLACE ... SELECT, inserting a new key
1688
After INSERT, new=REPLACE ... SELECT, inserting a new key
1690
replace into t1 (id, operation)
1691
select @id, "REPLACE ... SELECT, deleting a duplicate";
1694
1 REPLACE ... SELECT, deleting a duplicate
1695
select * from t1_op_log;
1697
Before INSERT, new=REPLACE ... SELECT, deleting a duplicate
1698
Before DELETE, old=REPLACE ... SELECT, inserting a new key
1699
After DELETE, old=REPLACE ... SELECT, inserting a new key
1700
After INSERT, new=REPLACE ... SELECT, deleting a duplicate
1703
insert into t1 (id, operation) values (1, "INSERT for multi-DELETE");
1704
insert into t2 (id) values (1);
1705
delete t1.*, t2.* from t1, t2 where t1.id=1;
1710
select * from t1_op_log;
1712
Before INSERT, new=INSERT for multi-DELETE
1713
After INSERT, new=INSERT for multi-DELETE
1714
Before DELETE, old=INSERT for multi-DELETE
1715
After DELETE, old=INSERT for multi-DELETE
1719
insert into t1 (id, operation) values (1, "INSERT for multi-UPDATE");
1720
insert into t2 (id) values (1);
1721
update t1, t2 set t1.id=2, operation="multi-UPDATE" where t1.id=1;
1723
set t2.id=3, operation="multi-UPDATE, SET for t2, but the trigger is fired" where t1.id=2;
1726
2 multi-UPDATE, SET for t2, but the trigger is fired
1730
select * from t1_op_log;
1732
Before INSERT, new=INSERT for multi-UPDATE
1733
After INSERT, new=INSERT for multi-UPDATE
1734
Before UPDATE, new=multi-UPDATE, old=INSERT for multi-UPDATE
1735
After UPDATE, new=multi-UPDATE, old=INSERT for multi-UPDATE
1736
Before UPDATE, new=multi-UPDATE, SET for t2, but the trigger is fired, old=multi-UPDATE
1737
After UPDATE, new=multi-UPDATE, SET for t2, but the trigger is fired, old=multi-UPDATE
1740
truncate table t1_op_log;
1742
Now do the same but use a view instead of the base table.
1744
insert into v1 (operation) values ("INSERT");
1745
set @id=last_insert_id();
1749
select * from t1_op_log;
1751
Before INSERT, new=INSERT
1752
After INSERT, new=INSERT
1754
update v1 set operation="UPDATE" where id=@id;
1758
select * from t1_op_log;
1760
Before UPDATE, new=UPDATE, old=INSERT
1761
After UPDATE, new=UPDATE, old=INSERT
1763
delete from v1 where id=@id;
1766
select * from t1_op_log;
1768
Before DELETE, old=UPDATE
1769
After DELETE, old=UPDATE
1772
insert into v1 (id, operation) values
1773
(NULL, "INSERT ON DUPLICATE KEY UPDATE, inserting a new key")
1774
on duplicate key update id=NULL, operation="Should never happen";
1775
set @id=last_insert_id();
1778
1 INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1779
select * from t1_op_log;
1781
Before INSERT, new=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1782
After INSERT, new=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1784
insert into v1 (id, operation) values
1785
(@id, "INSERT ON DUPLICATE KEY UPDATE, the key value is the same")
1786
on duplicate key update id=NULL,
1787
operation="INSERT ON DUPLICATE KEY UPDATE, updating the duplicate";
1790
0 INSERT ON DUPLICATE KEY UPDATE, updating the duplicate
1791
select * from t1_op_log;
1793
Before INSERT, new=INSERT ON DUPLICATE KEY UPDATE, the key value is the same
1794
Before UPDATE, new=INSERT ON DUPLICATE KEY UPDATE, updating the duplicate, old=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1795
After UPDATE, new=INSERT ON DUPLICATE KEY UPDATE, updating the duplicate, old=INSERT ON DUPLICATE KEY UPDATE, inserting a new key
1798
replace into v1 values (NULL, "REPLACE, inserting a new key");
1799
set @id=last_insert_id();
1802
1 REPLACE, inserting a new key
1803
select * from t1_op_log;
1805
Before INSERT, new=REPLACE, inserting a new key
1806
After INSERT, new=REPLACE, inserting a new key
1808
replace into v1 values (@id, "REPLACE, deleting the duplicate");
1811
1 REPLACE, deleting the duplicate
1812
select * from t1_op_log;
1814
Before INSERT, new=REPLACE, deleting the duplicate
1815
Before DELETE, old=REPLACE, inserting a new key
1816
After DELETE, old=REPLACE, inserting a new key
1817
After INSERT, new=REPLACE, deleting the duplicate
1820
create table if not exists v1
1821
select NULL, "CREATE TABLE ... SELECT, inserting a new key";
1823
Note 1050 Table 'v1' already exists
1824
set @id=last_insert_id();
1827
1 CREATE TABLE ... SELECT, inserting a new key
1828
select * from t1_op_log;
1830
Before INSERT, new=CREATE TABLE ... SELECT, inserting a new key
1831
After INSERT, new=CREATE TABLE ... SELECT, inserting a new key
1833
create table if not exists v1 replace
1834
select @id, "CREATE TABLE ... REPLACE SELECT, deleting a duplicate key";
1836
Note 1050 Table 'v1' already exists
1839
1 CREATE TABLE ... REPLACE SELECT, deleting a duplicate key
1840
select * from t1_op_log;
1842
Before INSERT, new=CREATE TABLE ... REPLACE SELECT, deleting a duplicate key
1843
Before DELETE, old=CREATE TABLE ... SELECT, inserting a new key
1844
After DELETE, old=CREATE TABLE ... SELECT, inserting a new key
1845
After INSERT, new=CREATE TABLE ... REPLACE SELECT, deleting a duplicate key
1848
insert into v1 (id, operation)
1849
select NULL, "INSERT ... SELECT, inserting a new key";
1850
set @id=last_insert_id();
1853
1 INSERT ... SELECT, inserting a new key
1854
select * from t1_op_log;
1856
Before INSERT, new=INSERT ... SELECT, inserting a new key
1857
After INSERT, new=INSERT ... SELECT, inserting a new key
1859
insert into v1 (id, operation)
1861
"INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate"
1862
on duplicate key update id=NULL,
1863
operation="INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate";
1866
0 INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate
1867
select * from t1_op_log;
1869
Before INSERT, new=INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate
1870
Before UPDATE, new=INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate, old=INSERT ... SELECT, inserting a new key
1871
After UPDATE, new=INSERT ... SELECT ... ON DUPLICATE KEY UPDATE, updating a duplicate, old=INSERT ... SELECT, inserting a new key
1874
replace into v1 (id, operation)
1875
select NULL, "REPLACE ... SELECT, inserting a new key";
1876
set @id=last_insert_id();
1879
1 REPLACE ... SELECT, inserting a new key
1880
select * from t1_op_log;
1882
Before INSERT, new=REPLACE ... SELECT, inserting a new key
1883
After INSERT, new=REPLACE ... SELECT, inserting a new key
1885
replace into v1 (id, operation)
1886
select @id, "REPLACE ... SELECT, deleting a duplicate";
1889
1 REPLACE ... SELECT, deleting a duplicate
1890
select * from t1_op_log;
1892
Before INSERT, new=REPLACE ... SELECT, deleting a duplicate
1893
Before DELETE, old=REPLACE ... SELECT, inserting a new key
1894
After DELETE, old=REPLACE ... SELECT, inserting a new key
1895
After INSERT, new=REPLACE ... SELECT, deleting a duplicate
1898
insert into v1 (id, operation) values (1, "INSERT for multi-DELETE");
1899
insert into t2 (id) values (1);
1900
delete v1.*, t2.* from v1, t2 where v1.id=1;
1905
select * from t1_op_log;
1907
Before INSERT, new=INSERT for multi-DELETE
1908
After INSERT, new=INSERT for multi-DELETE
1909
Before DELETE, old=INSERT for multi-DELETE
1910
After DELETE, old=INSERT for multi-DELETE
1914
insert into v1 (id, operation) values (1, "INSERT for multi-UPDATE");
1915
insert into t2 (id) values (1);
1916
update v1, t2 set v1.id=2, operation="multi-UPDATE" where v1.id=1;
1918
set t2.id=3, operation="multi-UPDATE, SET for t2, but the trigger is fired" where v1.id=2;
1921
2 multi-UPDATE, SET for t2, but the trigger is fired
1925
select * from t1_op_log;
1927
Before INSERT, new=INSERT for multi-UPDATE
1928
After INSERT, new=INSERT for multi-UPDATE
1929
Before UPDATE, new=multi-UPDATE, old=INSERT for multi-UPDATE
1930
After UPDATE, new=multi-UPDATE, old=INSERT for multi-UPDATE
1931
Before UPDATE, new=multi-UPDATE, SET for t2, but the trigger is fired, old=multi-UPDATE
1932
After UPDATE, new=multi-UPDATE, SET for t2, but the trigger is fired, old=multi-UPDATE
1934
drop table t1, t2, t1_op_log;
1936
Bug#27248 Triggers: error if insert affects temporary table
1938
The bug was fixed by the fix for Bug#26141
1940
drop table if exists t1;
1941
drop temporary table if exists t2;
1942
create table t1 (s1 int);
1943
create temporary table t2 (s1 int);
1944
create trigger t1_bi before insert on t1 for each row insert into t2 values (0);
1945
create trigger t1_bd before delete on t1 for each row delete from t2;
1946
insert into t1 values (0);
1947
insert into t1 values (0);
1962
drop temporary table t2;
1963
#------------------------------------------------------------------------
1964
# Bug#39953 Triggers are not working properly with multi table updates
1965
#------------------------------------------------------------------------
1966
DROP TABLE IF EXISTS t1;
1967
DROP TRIGGER IF EXISTS t_insert;
1968
DROP TABLE IF EXISTS t2;
1969
CREATE TABLE t1 (a int, date_insert timestamp, PRIMARY KEY (a));
1970
INSERT INTO t1 (a) VALUES (2),(5);
1971
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
1972
CREATE TRIGGER t_insert AFTER INSERT ON t2 FOR EACH ROW BEGIN UPDATE t1,t2 SET
1973
date_insert=NOW() WHERE t1.a=t2.b AND t2.a=NEW.a; END |
1974
INSERT INTO t2 (a,b) VALUES (1,2);
1975
DROP TRIGGER t_insert;
1976
CREATE TRIGGER t_insert AFTER INSERT ON t2 FOR EACH ROW BEGIN UPDATE t1,t2 SET
1977
date_insert=NOW(),b=b+1 WHERE t1.a=t2.b AND t2.a=NEW.a; END |
1978
INSERT INTO t2 (a,b) VALUES (3,5);
1979
ERROR HY000: Can't update table 't2' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
1981
DROP TRIGGER t_insert;
1984
drop table if exists table_25411_a;
1985
drop table if exists table_25411_b;
1986
create table table_25411_a(a int);
1987
create table table_25411_b(b int);
1988
create trigger trg_25411a_ai after insert on table_25411_a
1990
insert into table_25411_b select new.*;
1991
select * from table_25411_a;
1993
insert into table_25411_a values (1);
1994
ERROR 42S02: Unknown table 'new'
1995
select * from table_25411_a;
1998
drop table table_25411_a;
1999
drop table table_25411_b;
2000
DROP TRIGGER IF EXISTS trg;
2001
SHOW CREATE TRIGGER trg;
2002
ERROR HY000: Trigger does not exist
2003
drop table if exists t1;
2004
create table t1 (i int, j int);
2005
create trigger t1_bi before insert on t1 for each row begin end;
2006
create trigger t1_bi before insert on t1 for each row begin end;
2007
ERROR 42000: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
2010
ERROR HY000: Trigger does not exist
2011
lock tables t1 read;
2012
create trigger t1_bi before insert on t1 for each row begin end;
2013
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
2014
create trigger t1_bi before insert on t1 for each row begin end;
2015
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
2017
ERROR HY000: Trigger does not exist
2019
create trigger t1_bi before insert on t1 for each row begin end;
2020
lock tables t1 read;
2021
create trigger t1_bi before insert on t1 for each row begin end;
2022
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
2024
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
2027
lock tables t1 write;
2028
create trigger b1_bi before insert on t1 for each row set new.i = new.i + 10;
2029
insert into t1 values (10, 10);
2031
insert into t1 values (10, 10);
2038
drop table if exists t1, t2;
2039
drop trigger if exists trg1;
2040
drop trigger if exists trg2;
2041
create table t1 (a int);
2042
create table t2 (b int);
2043
create trigger trg1 after update on t1 for each row set @a= @a+1;
2044
create trigger trg2 after update on t2 for each row set @b= @b+1;
2045
insert into t1 values (1), (2), (3);
2046
insert into t2 values (1), (2), (3);
2049
update t1, t2 set t1.a= t1.a, t2.b= t2.b;
2053
update t1, t2 set t1.a= t2.b, t2.b= t1.a;
2076
CREATE TABLE t1 ( a INT, b INT );
2077
CREATE TABLE t2 ( a INT AUTO_INCREMENT KEY, b INT );
2078
INSERT INTO t1 (a) VALUES (1);
2083
UPDATE a_nonextisting_table SET a = 1;
2085
CREATE TABLE IF NOT EXISTS t2 ( a INT, b INT ) SELECT a, b FROM t1;
2086
ERROR 42S02: Table 'test.a_nonextisting_table' doesn't exist