stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; DROP TABLE IF EXISTS t3; create table t1 (a int auto_increment, primary key (a), b int, rand_value double not null); create table t2 (a int auto_increment, primary key (a), b int); create table t3 (a int auto_increment, primary key (a), name varchar(64) not null, old_a int, old_b int, rand_value double not null); create trigger t1 before insert on t1 for each row begin insert into t3 values (NULL, "t1", new.a, new.b, rand()); end| create trigger t2 after insert on t2 for each row begin insert into t3 values (NULL, "t2", new.a, new.b, rand()); end| insert into t3 values(100,"log",0,0,0); SET @@RAND_SEED1=658490765, @@RAND_SEED2=635893186; insert into t1 values(1,1,rand()),(NULL,2,rand()); insert into t2 (b) values(last_insert_id()); insert into t2 values(3,0),(NULL,0); insert into t2 values(NULL,0),(500,0); select a,b, truncate(rand_value,4) from t1; a b truncate(rand_value,4) 1 1 0.4320 2 2 0.3055 select * from t2; a b 1 2 3 0 4 0 5 0 500 0 select a,name, old_a, old_b, truncate(rand_value,4) from t3; a name old_a old_b truncate(rand_value,4) 100 log 0 0 0.0000 101 t1 1 1 0.3203 102 t1 0 2 0.5666 103 t2 1 2 0.9164 104 t2 3 0 0.8826 105 t2 4 0 0.6635 106 t2 5 0 0.6699 107 t2 500 0 0.3593 --- On slave -- select a,b, truncate(rand_value,4) from t1; a b truncate(rand_value,4) 1 1 0.4320 2 2 0.3055 select * from t2; a b 1 2 3 0 4 0 5 0 500 0 select a,name, old_a, old_b, truncate(rand_value,4) from t3; a name old_a old_b truncate(rand_value,4) 100 log 0 0 0.0000 101 t1 1 1 0.3203 102 t1 0 2 0.5666 103 t2 1 2 0.9164 104 t2 3 0 0.8826 105 t2 4 0 0.6635 106 t2 5 0 0.6699 107 t2 500 0 0.3593 drop table t1,t2,t3; select get_lock("bug12480",2); get_lock("bug12480",2) 1 create table t1 (a datetime,b datetime, c datetime); drop function if exists bug12480; create function bug12480() returns datetime begin set @a=get_lock("bug12480",2); return now(); end| create trigger t1_first before insert on t1 for each row begin set @a=get_lock("bug12480",2); set new.b= now(); set new.c= bug12480(); end | insert into t1 set a = now(); select a=b && a=c from t1; a=b && a=c 1 SELECT routine_name, definer FROM information_schema.routines; routine_name definer add_suppression root@localhost check_testcase root@localhost check_warnings root@localhost force_restart root@localhost bug12480 root@localhost SELECT trigger_name, definer FROM information_schema.triggers; trigger_name definer gs_insert root@localhost ts_insert root@localhost t1_first root@localhost --- On slave -- SELECT routine_name, definer FROM information_schema.routines; routine_name definer add_suppression root@localhost check_testcase root@localhost check_warnings root@localhost force_restart root@localhost bug12480 root@localhost SELECT trigger_name, definer FROM information_schema.triggers; trigger_name definer gs_insert root@localhost ts_insert root@localhost t1_first root@localhost select a=b && a=c from t1; a=b && a=c 1 test 1 truncate table t1; drop trigger t1_first; insert into t1 values ("2003-03-03","2003-03-03","2003-03-03"),(bug12480(),bug12480(),bug12480()),(now(),now(),now()); select a=b && a=c from t1; a=b && a=c 1 1 1 drop function bug12480; drop table t1; create table t1 (i int); create table t2 (i int); create trigger tr1 before insert on t1 for each row begin insert into t2 values (1); end| create database other; use other; insert into test.t1 values (1); use test; drop table t1,t2; drop database other; test case for BUG#13227 ------------------- 10 ------------------- drop table if exists t110; drop table if exists t210,t310; create table t110 (f1 int) /* 2 replicate */; insert into t110 values (-5); insert into t110 values (-4); insert into t110 values (-3); insert into t110 values (-2); insert into t110 values (-1); select * from t110; f1 -5 -4 -3 -2 -1 create trigger trg110 before update on t110 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t210 where f1=NEW.f1; INSERT INTO t310 values (r); end| create table t210 (f1 int, f2 int) /* slave local */; create table t310 (f3 int) /* slave local */; insert into t210 values (5, 5*100); insert into t210 values (4, 4*100); insert into t210 values (3, 3*100); insert into t210 values (2, 2*100); insert into t210 values (1, 1*100); select * from t210; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t110 SET f1=5 where f1=-5; SELECT * from t110 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t310 /* must be f3 5*100 */; f3 500 UPDATE t110 SET f1=5 where f1=-5; UPDATE t110 SET f1=4 where f1=-4; UPDATE t110 SET f1=3 where f1=-3; UPDATE t110 SET f1=2 where f1=-2; UPDATE t110 SET f1=1 where f1=-1; SELECT * from t110 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t310 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg110; drop table t210,t310; drop table t110; ------------------- 9 ------------------- drop table if exists t19; drop table if exists t29,t39; create table t19 (f1 int) /* 2 replicate */; insert into t19 values (-5); insert into t19 values (-4); insert into t19 values (-3); insert into t19 values (-2); insert into t19 values (-1); select * from t19; f1 -5 -4 -3 -2 -1 create trigger trg19 before update on t19 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t29 where f1=NEW.f1; INSERT INTO t39 values (r); end| create table t29 (f1 int, f2 int) /* slave local */; create table t39 (f3 int) /* slave local */; insert into t29 values (5, 5*100); insert into t29 values (4, 4*100); insert into t29 values (3, 3*100); insert into t29 values (2, 2*100); insert into t29 values (1, 1*100); select * from t29; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t19 SET f1=5 where f1=-5; SELECT * from t19 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t39 /* must be f3 5*100 */; f3 500 UPDATE t19 SET f1=5 where f1=-5; UPDATE t19 SET f1=4 where f1=-4; UPDATE t19 SET f1=3 where f1=-3; UPDATE t19 SET f1=2 where f1=-2; UPDATE t19 SET f1=1 where f1=-1; SELECT * from t19 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t39 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg19; drop table t29,t39; drop table t19; ------------------- 8 ------------------- drop table if exists t18; drop table if exists t28,t38; create table t18 (f1 int) /* 2 replicate */; insert into t18 values (-5); insert into t18 values (-4); insert into t18 values (-3); insert into t18 values (-2); insert into t18 values (-1); select * from t18; f1 -5 -4 -3 -2 -1 create trigger trg18 before update on t18 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t28 where f1=NEW.f1; INSERT INTO t38 values (r); end| create table t28 (f1 int, f2 int) /* slave local */; create table t38 (f3 int) /* slave local */; insert into t28 values (5, 5*100); insert into t28 values (4, 4*100); insert into t28 values (3, 3*100); insert into t28 values (2, 2*100); insert into t28 values (1, 1*100); select * from t28; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t18 SET f1=5 where f1=-5; SELECT * from t18 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t38 /* must be f3 5*100 */; f3 500 UPDATE t18 SET f1=5 where f1=-5; UPDATE t18 SET f1=4 where f1=-4; UPDATE t18 SET f1=3 where f1=-3; UPDATE t18 SET f1=2 where f1=-2; UPDATE t18 SET f1=1 where f1=-1; SELECT * from t18 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t38 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg18; drop table t28,t38; drop table t18; ------------------- 7 ------------------- drop table if exists t17; drop table if exists t27,t37; create table t17 (f1 int) /* 2 replicate */; insert into t17 values (-5); insert into t17 values (-4); insert into t17 values (-3); insert into t17 values (-2); insert into t17 values (-1); select * from t17; f1 -5 -4 -3 -2 -1 create trigger trg17 before update on t17 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t27 where f1=NEW.f1; INSERT INTO t37 values (r); end| create table t27 (f1 int, f2 int) /* slave local */; create table t37 (f3 int) /* slave local */; insert into t27 values (5, 5*100); insert into t27 values (4, 4*100); insert into t27 values (3, 3*100); insert into t27 values (2, 2*100); insert into t27 values (1, 1*100); select * from t27; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t17 SET f1=5 where f1=-5; SELECT * from t17 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t37 /* must be f3 5*100 */; f3 500 UPDATE t17 SET f1=5 where f1=-5; UPDATE t17 SET f1=4 where f1=-4; UPDATE t17 SET f1=3 where f1=-3; UPDATE t17 SET f1=2 where f1=-2; UPDATE t17 SET f1=1 where f1=-1; SELECT * from t17 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t37 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg17; drop table t27,t37; drop table t17; ------------------- 6 ------------------- drop table if exists t16; drop table if exists t26,t36; create table t16 (f1 int) /* 2 replicate */; insert into t16 values (-5); insert into t16 values (-4); insert into t16 values (-3); insert into t16 values (-2); insert into t16 values (-1); select * from t16; f1 -5 -4 -3 -2 -1 create trigger trg16 before update on t16 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t26 where f1=NEW.f1; INSERT INTO t36 values (r); end| create table t26 (f1 int, f2 int) /* slave local */; create table t36 (f3 int) /* slave local */; insert into t26 values (5, 5*100); insert into t26 values (4, 4*100); insert into t26 values (3, 3*100); insert into t26 values (2, 2*100); insert into t26 values (1, 1*100); select * from t26; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t16 SET f1=5 where f1=-5; SELECT * from t16 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t36 /* must be f3 5*100 */; f3 500 UPDATE t16 SET f1=5 where f1=-5; UPDATE t16 SET f1=4 where f1=-4; UPDATE t16 SET f1=3 where f1=-3; UPDATE t16 SET f1=2 where f1=-2; UPDATE t16 SET f1=1 where f1=-1; SELECT * from t16 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t36 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg16; drop table t26,t36; drop table t16; ------------------- 5 ------------------- drop table if exists t15; drop table if exists t25,t35; create table t15 (f1 int) /* 2 replicate */; insert into t15 values (-5); insert into t15 values (-4); insert into t15 values (-3); insert into t15 values (-2); insert into t15 values (-1); select * from t15; f1 -5 -4 -3 -2 -1 create trigger trg15 before update on t15 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t25 where f1=NEW.f1; INSERT INTO t35 values (r); end| create table t25 (f1 int, f2 int) /* slave local */; create table t35 (f3 int) /* slave local */; insert into t25 values (5, 5*100); insert into t25 values (4, 4*100); insert into t25 values (3, 3*100); insert into t25 values (2, 2*100); insert into t25 values (1, 1*100); select * from t25; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t15 SET f1=5 where f1=-5; SELECT * from t15 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t35 /* must be f3 5*100 */; f3 500 UPDATE t15 SET f1=5 where f1=-5; UPDATE t15 SET f1=4 where f1=-4; UPDATE t15 SET f1=3 where f1=-3; UPDATE t15 SET f1=2 where f1=-2; UPDATE t15 SET f1=1 where f1=-1; SELECT * from t15 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t35 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg15; drop table t25,t35; drop table t15; ------------------- 4 ------------------- drop table if exists t14; drop table if exists t24,t34; create table t14 (f1 int) /* 2 replicate */; insert into t14 values (-5); insert into t14 values (-4); insert into t14 values (-3); insert into t14 values (-2); insert into t14 values (-1); select * from t14; f1 -5 -4 -3 -2 -1 create trigger trg14 before update on t14 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t24 where f1=NEW.f1; INSERT INTO t34 values (r); end| create table t24 (f1 int, f2 int) /* slave local */; create table t34 (f3 int) /* slave local */; insert into t24 values (5, 5*100); insert into t24 values (4, 4*100); insert into t24 values (3, 3*100); insert into t24 values (2, 2*100); insert into t24 values (1, 1*100); select * from t24; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t14 SET f1=5 where f1=-5; SELECT * from t14 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t34 /* must be f3 5*100 */; f3 500 UPDATE t14 SET f1=5 where f1=-5; UPDATE t14 SET f1=4 where f1=-4; UPDATE t14 SET f1=3 where f1=-3; UPDATE t14 SET f1=2 where f1=-2; UPDATE t14 SET f1=1 where f1=-1; SELECT * from t14 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t34 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg14; drop table t24,t34; drop table t14; ------------------- 3 ------------------- drop table if exists t13; drop table if exists t23,t33; create table t13 (f1 int) /* 2 replicate */; insert into t13 values (-5); insert into t13 values (-4); insert into t13 values (-3); insert into t13 values (-2); insert into t13 values (-1); select * from t13; f1 -5 -4 -3 -2 -1 create trigger trg13 before update on t13 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t23 where f1=NEW.f1; INSERT INTO t33 values (r); end| create table t23 (f1 int, f2 int) /* slave local */; create table t33 (f3 int) /* slave local */; insert into t23 values (5, 5*100); insert into t23 values (4, 4*100); insert into t23 values (3, 3*100); insert into t23 values (2, 2*100); insert into t23 values (1, 1*100); select * from t23; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t13 SET f1=5 where f1=-5; SELECT * from t13 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t33 /* must be f3 5*100 */; f3 500 UPDATE t13 SET f1=5 where f1=-5; UPDATE t13 SET f1=4 where f1=-4; UPDATE t13 SET f1=3 where f1=-3; UPDATE t13 SET f1=2 where f1=-2; UPDATE t13 SET f1=1 where f1=-1; SELECT * from t13 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t33 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg13; drop table t23,t33; drop table t13; ------------------- 2 ------------------- drop table if exists t12; drop table if exists t22,t32; create table t12 (f1 int) /* 2 replicate */; insert into t12 values (-5); insert into t12 values (-4); insert into t12 values (-3); insert into t12 values (-2); insert into t12 values (-1); select * from t12; f1 -5 -4 -3 -2 -1 create trigger trg12 before update on t12 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t22 where f1=NEW.f1; INSERT INTO t32 values (r); end| create table t22 (f1 int, f2 int) /* slave local */; create table t32 (f3 int) /* slave local */; insert into t22 values (5, 5*100); insert into t22 values (4, 4*100); insert into t22 values (3, 3*100); insert into t22 values (2, 2*100); insert into t22 values (1, 1*100); select * from t22; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t12 SET f1=5 where f1=-5; SELECT * from t12 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t32 /* must be f3 5*100 */; f3 500 UPDATE t12 SET f1=5 where f1=-5; UPDATE t12 SET f1=4 where f1=-4; UPDATE t12 SET f1=3 where f1=-3; UPDATE t12 SET f1=2 where f1=-2; UPDATE t12 SET f1=1 where f1=-1; SELECT * from t12 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t32 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg12; drop table t22,t32; drop table t12; ------------------- 1 ------------------- drop table if exists t11; drop table if exists t21,t31; create table t11 (f1 int) /* 2 replicate */; insert into t11 values (-5); insert into t11 values (-4); insert into t11 values (-3); insert into t11 values (-2); insert into t11 values (-1); select * from t11; f1 -5 -4 -3 -2 -1 create trigger trg11 before update on t11 /* slave local */ for each row begin DECLARE r integer; SELECT f2 INTO r FROM t21 where f1=NEW.f1; INSERT INTO t31 values (r); end| create table t21 (f1 int, f2 int) /* slave local */; create table t31 (f3 int) /* slave local */; insert into t21 values (5, 5*100); insert into t21 values (4, 4*100); insert into t21 values (3, 3*100); insert into t21 values (2, 2*100); insert into t21 values (1, 1*100); select * from t21; f1 f2 5 500 4 400 3 300 2 200 1 100 UPDATE t11 SET f1=5 where f1=-5; SELECT * from t11 /* must be f1 5, 1 - 5 2 - 5 ... -1 */; f1 5 -4 -3 -2 -1 SELECT * from t31 /* must be f3 5*100 */; f3 500 UPDATE t11 SET f1=5 where f1=-5; UPDATE t11 SET f1=4 where f1=-4; UPDATE t11 SET f1=3 where f1=-3; UPDATE t11 SET f1=2 where f1=-2; UPDATE t11 SET f1=1 where f1=-1; SELECT * from t11 /* must be f1 5 ... 1 */; f1 5 4 3 2 1 SELECT * from t31 /* must be f3 5 * 100 ... 100 */; f3 500 400 300 200 100 drop trigger trg11; drop table t21,t31; drop table t11; STOP SLAVE; FLUSH LOGS; RESET SLAVE; START SLAVE; SELECT MASTER_POS_WAIT('master-bin.000001', 513) >= 0; MASTER_POS_WAIT('master-bin.000001', 513) >= 0 1 SHOW TABLES LIKE 't_'; Tables_in_test (t_) t1 t2 SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation trg1 INSERT t1 INSERT INTO t2 VALUES(CURRENT_USER()) AFTER NULL latin1 latin1_swedish_ci latin1_swedish_ci SELECT * FROM t1; c 1 SELECT * FROM t2; s @ INSERT INTO t1 VALUES(2); SELECT * FROM t1; c 1 2 SELECT * FROM t2; s @ root@localhost DROP TRIGGER trg1; Warnings: Warning 1454 No definer attribute for trigger 'test'.'trg1'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger. DROP TABLE t1; DROP TABLE t2; STOP SLAVE; RESET SLAVE; SHOW TABLES LIKE 't_'; Tables_in_test (t_) SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation RESET MASTER; START SLAVE; ---> Test for BUG#20438 ---> Preparing environment... ---> connection: master DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; ---> Synchronizing slave with master... ---> connection: master ---> Creating objects... CREATE TABLE t1(c INT); CREATE TABLE t2(c INT); /*!50003 CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES(NEW.c * 10) */; ---> Inserting value... INSERT INTO t1 VALUES(1); ---> Checking on master... SELECT * FROM t1; c 1 SELECT * FROM t2; c 10 ---> Synchronizing slave with master... ---> connection: master ---> Checking on slave... SELECT * FROM t1; c 1 SELECT * FROM t2; c 10 ---> connection: master ---> Cleaning up... DROP TABLE t1; DROP TABLE t2; drop table if exists t1; create table t1(a int, b varchar(50)); drop trigger not_a_trigger; ERROR HY000: Trigger does not exist drop trigger if exists not_a_trigger; Warnings: Note 1360 Trigger does not exist create trigger t1_bi before insert on t1 for each row set NEW.b := "In trigger t1_bi"; insert into t1 values (1, "a"); drop trigger if exists t1_bi; insert into t1 values (2, "b"); drop trigger if exists t1_bi; Warnings: Note 1360 Trigger does not exist insert into t1 values (3, "c"); select * from t1; a b 1 In trigger t1_bi 2 b 3 c select * from t1; a b 1 In trigger t1_bi 2 b 3 c drop table if exists t1,t11; Warnings: Note 1051 Unknown table 't11'