|
|
set global innodb_support_xa=default;set session innodb_support_xa=default;SET SESSION STORAGE_ENGINE = InnoDB;drop table if exists t1,t2,t3,t1m,t1i,t2m,t2i,t4;drop procedure if exists p1;create table t1 (c_id int(11) not null default '0',org_id int(11) default null,unique key contacts$c_id (c_id),key contacts$org_id (org_id));insert into t1 values(2,null),(120,null),(141,null),(218,7), (128,1),(151,2),(234,2),(236,2),(243,2),(255,2),(259,2),(232,3),(235,3),(238,3),(246,3),(253,3),(269,3),(285,3),(291,3),(293,3),(131,4),(230,4),(231,4);create table t2 (slai_id int(11) not null default '0',owner_tbl int(11) default null,owner_id int(11) default null,sla_id int(11) default null,inc_web int(11) default null,inc_email int(11) default null,inc_chat int(11) default null,inc_csr int(11) default null,inc_total int(11) default null,time_billed int(11) default null,activedate timestamp null default null,expiredate timestamp null default null,state int(11) default null,sla_set int(11) default null,unique key t2$slai_id (slai_id),key t2$owner_id (owner_id),key t2$sla_id (sla_id));insert into t2(slai_id, owner_tbl, owner_id, sla_id) values(1,3,1,1), (3,3,10,2), (4,3,3,6), (5,3,2,5), (6,3,8,3), (7,3,9,7),(8,3,6,8), (9,3,4,9), (10,3,5,10), (11,3,11,11), (12,3,7,12);flush tables;select si.slai_idfrom t1 c join t2 si on((si.owner_tbl = 3 and si.owner_id = c.org_id) or( si.owner_tbl = 2 and si.owner_id = c.c_id))wherec.c_id = 218 and expiredate is null;slai_id12select * from t1 where org_id is null;c_id org_id2 NULL120 NULL141 NULLselect si.slai_idfrom t1 c join t2 si on((si.owner_tbl = 3 and si.owner_id = c.org_id) or( si.owner_tbl = 2 and si.owner_id = c.c_id))wherec.c_id = 218 and expiredate is null;slai_id12drop table t1, t2;CREATE TABLE t1 (a int, b int, KEY b (b));CREATE TABLE t2 (a int, b int, PRIMARY KEY (a,b));CREATE TABLE t3 (a int, b int, c int, PRIMARY KEY (a),UNIQUE KEY b (b,c), KEY a (a,b,c));INSERT INTO t1 VALUES (1, 1);INSERT INTO t1 SELECT a + 1, b + 1 FROM t1;INSERT INTO t1 SELECT a + 2, b + 2 FROM t1;INSERT INTO t2 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);INSERT INTO t2 SELECT a + 1, b FROM t2;DELETE FROM t2 WHERE a = 1 AND b < 2;INSERT INTO t3 VALUES (1,1,1),(2,1,2);INSERT INTO t3 SELECT a + 2, a + 2, 3 FROM t3;INSERT INTO t3 SELECT a + 4, a + 4, 3 FROM t3;SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHEREt3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)ORDER BY t1.b LIMIT 2;b a1 12 2SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHEREt3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)ORDER BY t1.b LIMIT 5;b a1 12 22 23 33 3DROP TABLE t1, t2, t3;CREATE TABLE `t1` (`id1` INT) ;INSERT INTO `t1` (`id1`) VALUES (1),(5),(2);CREATE TABLE `t2` (`id1` INT,`id2` INT NOT NULL,`id3` INT,`id4` INT NOT NULL,UNIQUE (`id2`,`id4`),KEY (`id1`));INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES(1,1,1,0),(1,1,2,1),(5,1,2,2),(6,1,2,3),(1,2,2,2),(1,2,1,1);SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2);id12DROP TABLE t1, t2;create table t1 (c1 int) engine=innodb;handler t1 open;handler t1 read first;c1Before and after comparison0drop table t1;CREATE TABLE t1(c1 TEXT, UNIQUE (c1(1)), cnt INT DEFAULT 1)ENGINE=INNODB CHARACTER SET UTF8;INSERT INTO t1 (c1) VALUES ('1a');SELECT * FROM t1;c1 cnt1a 1INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;SELECT * FROM t1;c1 cnt1a 2DROP TABLE t1;CREATE TABLE t1(c1 VARCHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1)ENGINE=INNODB CHARACTER SET UTF8;INSERT INTO t1 (c1) VALUES ('1a');SELECT * FROM t1;c1 cnt1a 1INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;SELECT * FROM t1;c1 cnt1a 2DROP TABLE t1;CREATE TABLE t1(c1 CHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1)ENGINE=INNODB CHARACTER SET UTF8;INSERT INTO t1 (c1) VALUES ('1a');SELECT * FROM t1;c1 cnt1a 1INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;SELECT * FROM t1;c1 cnt1a 2DROP TABLE t1;CREATE TABLE t1 (a1 decimal(10,0) DEFAULT NULL,a2 blob,a3 time DEFAULT NULL,a4 blob,a5 char(175) DEFAULT NULL,a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',a7 tinyblob,INDEX idx (a6,a7(239),a5)) ENGINE=InnoDB;EXPLAIN SELECT a4 FROM t1 WHEREa6=NULL ANDa4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tablesEXPLAIN SELECT t1.a4 FROM t1, t1 t WHEREt.a6=t.a6 AND t1.a6=NULL ANDt1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tablesDROP TABLE t1;create table t1m (a int) engine = MEMORY;create table t1i (a int);create table t2m (a int) engine = MEMORY;create table t2i (a int);insert into t2m values (5);insert into t2i values (5);select min(a) from t1i;min(a)NULLselect min(7) from t1i;min(7)NULLselect min(7) from DUAL;min(7)7explain select min(7) from t2i join t1i;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2i ALL NULL NULL NULL NULL 1 1 SIMPLE t1i ALL NULL NULL NULL NULL 1 Using join bufferselect min(7) from t2i join t1i;min(7)NULLselect max(a) from t1i;max(a)NULLselect max(7) from t1i;max(7)NULLselect max(7) from DUAL;max(7)7explain select max(7) from t2i join t1i;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2i ALL NULL NULL NULL NULL 1 1 SIMPLE t1i ALL NULL NULL NULL NULL 1 Using join bufferselect max(7) from t2i join t1i;max(7)NULLselect 1, min(a) from t1i where a=99;1 min(a)1 NULLselect 1, min(a) from t1i where 1=99;1 min(a)1 NULLselect 1, min(1) from t1i where a=99;1 min(1)1 NULLselect 1, min(1) from t1i where 1=99;1 min(1)1 NULLselect 1, max(a) from t1i where a=99;1 max(a)1 NULLselect 1, max(a) from t1i where 1=99;1 max(a)1 NULLselect 1, max(1) from t1i where a=99;1 max(1)1 NULLselect 1, max(1) from t1i where 1=99;1 max(1)1 NULLexplain select count(*), min(7), max(7) from t1m, t1i;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1m system NULL NULL NULL NULL 0 const row not found1 SIMPLE t1i ALL NULL NULL NULL NULL 1 select count(*), min(7), max(7) from t1m, t1i;count(*) min(7) max(7)0 NULL NULLexplain select count(*), min(7), max(7) from t1m, t2i;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1m system NULL NULL NULL NULL 0 const row not found1 SIMPLE t2i ALL NULL NULL NULL NULL 1 select count(*), min(7), max(7) from t1m, t2i;count(*) min(7) max(7)0 NULL NULLexplain select count(*), min(7), max(7) from t2m, t1i;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2m system NULL NULL NULL NULL 1 1 SIMPLE t1i ALL NULL NULL NULL NULL 1 select count(*), min(7), max(7) from t2m, t1i;count(*) min(7) max(7)0 NULL NULLdrop table t1m, t1i, t2m, t2i;create table t1 (a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' ') ENGINE = MEMORY;insert into t1 (a1, a2, b, c, d) values('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'),('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'),('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'),('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'),('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4'),('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'),('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'),('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'),('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'),('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4');create table t4 (pk_col int auto_increment primary key, a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' ');insert into t4 (a1, a2, b, c, d, dummy) select * from t1;create index idx12672_0 on t4 (a1);create index idx12672_1 on t4 (a1,a2,b,c);create index idx12672_2 on t4 (a1,a2,b);analyze table t4;Table Op Msg_type Msg_texttest.t4 analyze status OKselect distinct a1 from t4 where pk_col not in (1,2,3,4);a1abcddrop table t1,t4;DROP TABLE IF EXISTS t2, t1;CREATE TABLE t1 (i INT NOT NULL PRIMARY KEY) ENGINE= InnoDB;CREATE TABLE t2 (i INT NOT NULL,FOREIGN KEY (i) REFERENCES t1 (i) ON DELETE NO ACTION) ENGINE= InnoDB;INSERT INTO t1 VALUES (1);INSERT INTO t2 VALUES (1);DELETE IGNORE FROM t1 WHERE i = 1;Warnings:Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`i`) REFERENCES `t1` (`i`) ON DELETE NO ACTION)SELECT * FROM t1, t2;i i1 1DROP TABLE t2, t1;End of 4.1 tests.create table t1 (a varchar(30), b varchar(30), primary key(a), key(b));select distinct a from t1;adrop table t1;create table t1(a int, key(a));insert into t1 values(1);select a, count(a) from t1 group by a with rollup;a count(a)1 1NULL 1drop table t1;create table t1 (f1 int, f2 char(1), primary key(f1,f2));insert into t1 values ( 1,"e"),(2,"a"),( 3,"c"),(4,"d");alter table t1 drop primary key, add primary key (f2, f1);explain select distinct f1 a, f1 b from t1;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL PRIMARY 5 NULL 4 Using index; Using temporaryexplain select distinct f1, f2 from t1;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 range NULL PRIMARY 5 NULL 3 Using index for group-by; Using temporarydrop table t1;CREATE TABLE t1 (id int(11) NOT NULL PRIMARY KEY, name varchar(20),INDEX (name));CREATE TABLE t2 (id int(11) NOT NULL PRIMARY KEY, fkey int(11));ALTER TABLE t2 ADD FOREIGN KEY (fkey) REFERENCES t2(id);INSERT INTO t1 VALUES (1,'A1'),(2,'A2'),(3,'B');INSERT INTO t2 VALUES (1,1),(2,2),(3,2),(4,3),(5,3);EXPLAINSELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.idWHERE t1.name LIKE 'A%';id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using indexEXPLAINSELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.idWHERE t1.name LIKE 'A%' OR FALSE;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2 index NULL fkey 5 NULL 5 Using index1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.fkey 1 Using whereDROP TABLE t1,t2;CREATE TABLE t1 (id int NOT NULL,name varchar(20) NOT NULL,dept varchar(20) NOT NULL,age tinyint(3) unsigned NOT NULL,PRIMARY KEY (id),INDEX (name,dept)) ENGINE=InnoDB;INSERT INTO t1(id, dept, age, name) VALUES(3987, 'cs1', 10, 'rs1'), (3988, 'cs2', 20, 'rs1'), (3995, 'cs3', 10, 'rs2'),(3996, 'cs4', 20, 'rs2'), (4003, 'cs5', 10, 'rs3'), (4004, 'cs6', 20, 'rs3'),(4011, 'cs7', 10, 'rs4'), (4012, 'cs8', 20, 'rs4'), (4019, 'cs9', 10, 'rs5'),(4020, 'cs10', 20, 'rs5'),(4027, 'cs11', 10, 'rs6'),(4028, 'cs12', 20, 'rs6');EXPLAIN SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 range name name 44 NULL 2 Using where; Using index for group-bySELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';name deptrs5 cs10rs5 cs9DELETE FROM t1;# Masking (#) number in "rows" column of the following EXPLAIN output, as it may vary (bug#47746).EXPLAIN SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 range name name 44 NULL # Using where; Using index for group-bySELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';name deptDROP TABLE t1;drop table if exists t1;show variables like 'innodb_rollback_on_timeout';Variable_name Valueinnodb_rollback_on_timeout OFFcreate table t1 (a int unsigned not null primary key) engine = innodb;insert into t1 values (1);commit;begin work;insert into t1 values (2);select * from t1;a12begin work;insert into t1 values (5);select * from t1;a15insert into t1 values (2);ERROR HY000: Lock wait timeout exceeded; try restarting transactionselect * from t1;a15commit;select * from t1;a12commit;select * from t1;a125drop table t1;set @save_qcache_size=@@global.query_cache_size;set @save_qcache_type=@@global.query_cache_type;set global query_cache_size=10*1024*1024;set global query_cache_type=1;drop table if exists `test`;Warnings:Note 1051 Unknown table 'test'CREATE TABLE `test` (`test1` varchar(3) NOT NULL,`test2` varchar(4) NOT NULL,PRIMARY KEY (`test1`))ENGINE=InnoDB DEFAULT CHARSET=latin1;INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '5678');select * from test;test1 test2tes 5678INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '1234')ON DUPLICATE KEY UPDATE `test2` = '1234';select * from test;test1 test2tes 1234flush tables;select * from test;test1 test2tes 1234drop table test;set global query_cache_type=@save_qcache_type;set global query_cache_size=@save_qcache_size;drop table if exists t1;show variables like 'innodb_rollback_on_timeout';Variable_name Valueinnodb_rollback_on_timeout OFFcreate table t1 (a int unsigned not null primary key) engine = innodb;insert into t1 values (1);commit;begin work;insert into t1 values (2);select * from t1;a12begin work;insert into t1 values (5);select * from t1;a15insert into t1 values (2);ERROR HY000: Lock wait timeout exceeded; try restarting transactionselect * from t1;a15commit;select * from t1;a12commit;select * from t1;a125drop table t1;create table t1(id int auto_increment,c char(1) not null,counter int not null default 1,primary key (id),unique key (c)) engine=innodb;insert into t1 (id, c) values(NULL, 'a'),(NULL, 'a')on duplicate key update id = values(id), counter = counter + 1;select * from t1;id c counter2 a 2insert into t1 (id, c) values(NULL, 'b')on duplicate key update id = values(id), counter = counter + 1;select * from t1;id c counter2 a 23 b 1truncate table t1;insert into t1 (id, c) values (NULL, 'a');select * from t1;id c counter1 a 1insert into t1 (id, c) values (NULL, 'b'), (NULL, 'b')on duplicate key update id = values(id), c = values(c), counter = counter + 1;select * from t1;id c counter1 a 13 b 2insert into t1 (id, c) values (NULL, 'a')on duplicate key update id = values(id), c = values(c), counter = counter + 1;select * from t1;id c counter3 b 24 a 2drop table t1;CREATE TABLE t1(id int AUTO_INCREMENT PRIMARY KEY,stat_id int NOT NULL,acct_id int DEFAULT NULL,INDEX idx1 (stat_id, acct_id),INDEX idx2 (acct_id)) ENGINE=MyISAM;CREATE TABLE t2(id int AUTO_INCREMENT PRIMARY KEY,stat_id int NOT NULL,acct_id int DEFAULT NULL,INDEX idx1 (stat_id, acct_id),INDEX idx2 (acct_id)) ENGINE=InnoDB;INSERT INTO t1(stat_id,acct_id) VALUES(1,759), (2,831), (3,785), (4,854), (1,921),(1,553), (2,589), (3,743), (2,827), (2,545),(4,779), (4,783), (1,597), (1,785), (4,832),(1,741), (1,833), (3,788), (2,973), (1,907);INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;UPDATE t1 SET acct_id=785 WHERE MOD(stat_id,2)=0 AND MOD(id,stat_id)=MOD(acct_id,stat_id);OPTIMIZE TABLE t1;Table Op Msg_type Msg_texttest.t1 optimize status OKSELECT COUNT(*) FROM t1;COUNT(*)40960SELECT COUNT(*) FROM t1 WHERE acct_id=785;COUNT(*)8702EXPLAIN SELECT COUNT(*) FROM t1 WHERE stat_id IN (1,3) AND acct_id=785;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 range idx1,idx2 idx1 9 NULL 2 Using where; Using indexINSERT INTO t2 SELECT * FROM t1;OPTIMIZE TABLE t2;Table Op Msg_type Msg_texttest.t2 optimize note Table does not support optimize, doing recreate + analyze insteadtest.t2 optimize status OKEXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2 range idx1,idx2 idx1 9 NULL 2 Using where; Using indexDROP TABLE t1,t2;create table t1(a int) engine=innodb;alter table t1 comment '123';show create table t1;Table Create Tablet1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='123'drop table t1;CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8;INSERT INTO t1 VALUES ('uk'),('bg');SELECT * FROM t1 WHERE a = 'uk';aukDELETE FROM t1 WHERE a = 'uk';SELECT * FROM t1 WHERE a = 'uk';aUPDATE t1 SET a = 'us' WHERE a = 'uk';SELECT * FROM t1 WHERE a = 'uk';aCREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;INSERT INTO t2 VALUES ('uk'),('bg');SELECT * FROM t2 WHERE a = 'uk';aukDELETE FROM t2 WHERE a = 'uk';SELECT * FROM t2 WHERE a = 'uk';aINSERT INTO t2 VALUES ('uk');UPDATE t2 SET a = 'us' WHERE a = 'uk';SELECT * FROM t2 WHERE a = 'uk';aCREATE TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;INSERT INTO t3 VALUES ('uk'),('bg');SELECT * FROM t3 WHERE a = 'uk';aukDELETE FROM t3 WHERE a = 'uk';SELECT * FROM t3 WHERE a = 'uk';aINSERT INTO t3 VALUES ('uk');UPDATE t3 SET a = 'us' WHERE a = 'uk';SELECT * FROM t3 WHERE a = 'uk';aDROP TABLE t1,t2,t3;create table t1 (a int) engine=innodb;select * from bug29807;ERROR 42S02: Table 'test.bug29807' doesn't existdrop table t1;drop table bug29807;ERROR 42S02: Unknown table 'bug29807'create table bug29807 (a int);drop table bug29807;CREATE TABLE t1 (a INT) ENGINE=InnoDB;CREATE TABLE t2 (a INT) ENGINE=InnoDB;switch to connection c1SET AUTOCOMMIT=0;INSERT INTO t2 VALUES (1);switch to connection c2SET AUTOCOMMIT=0;LOCK TABLES t1 READ, t2 READ;ERROR HY000: Lock wait timeout exceeded; try restarting transactionswitch to connection c1COMMIT;INSERT INTO t1 VALUES (1);switch to connection defaultSET AUTOCOMMIT=default;DROP TABLE t1,t2;CREATE TABLE t1 (id int NOT NULL auto_increment PRIMARY KEY,b int NOT NULL,c datetime NOT NULL,INDEX idx_b(b),INDEX idx_c(c)) ENGINE=InnoDB;CREATE TABLE t2 (b int NOT NULL auto_increment PRIMARY KEY,c datetime NOT NULL) ENGINE= MyISAM;INSERT INTO t2(c) VALUES ('2007-01-01');INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t2(c) SELECT c FROM t2;INSERT INTO t1(b,c) SELECT b,c FROM t2;UPDATE t2 SET c='2007-01-02';INSERT INTO t1(b,c) SELECT b,c FROM t2;UPDATE t2 SET c='2007-01-03';INSERT INTO t1(b,c) SELECT b,c FROM t2;set @@sort_buffer_size=8192;Warnings:Warning 1292 Truncated incorrect sort_buffer_size value: '8192'SELECT COUNT(*) FROM t1;COUNT(*)3072EXPLAIN SELECT COUNT(*) FROM t1 WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL idx_b,idx_c NULL NULL NULL # Using whereSELECT COUNT(*) FROM t1 WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;COUNT(*)3072EXPLAIN SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c) WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index_merge idx_b,idx_c idx_c,idx_b 8,4 NULL # Using sort_union(idx_c,idx_b); Using whereSELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;COUNT(*)3072set @@sort_buffer_size=default;DROP TABLE t1,t2;CREATE TABLE t1 (a int, b int);insert into t1 values (1,1),(1,2);CREATE TABLE t2 (primary key (a)) select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'drop table if exists t2;Warnings:Note 1051 Unknown table 't2'CREATE TEMPORARY TABLE t2 (primary key (a)) select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'drop table if exists t2;Warnings:Note 1051 Unknown table 't2'CREATE TABLE t2 (a int, b int, primary key (a));BEGIN;INSERT INTO t2 values(100,100);CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'SELECT * from t2;a b100 100ROLLBACK;SELECT * from t2;a b100 100TRUNCATE table t2;INSERT INTO t2 select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'SELECT * from t2;a bdrop table t2;CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a));BEGIN;INSERT INTO t2 values(100,100);CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'SELECT * from t2;a b100 100COMMIT;BEGIN;INSERT INTO t2 values(101,101);CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'SELECT * from t2;a b100 100101 101ROLLBACK;SELECT * from t2;a b100 100TRUNCATE table t2;INSERT INTO t2 select * from t1;ERROR 23000: Duplicate entry '1' for key 'PRIMARY'SELECT * from t2;a bdrop table t1,t2;create table t1(f1 varchar(800) binary not null, key(f1))character set utf8 collate utf8_general_ci;Warnings:Warning 1071 Specified key was too long; max key length is 767 bytesinsert into t1 values('aaa');drop table t1;CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c FLOAT, KEY b(b)) ENGINE = INNODB;INSERT INTO t1 VALUES ( 1 , 1 , 1);INSERT INTO t1 SELECT a + 1 , MOD(a + 1 , 20), 1 FROM t1;INSERT INTO t1 SELECT a + 2 , MOD(a + 2 , 20), 1 FROM t1;INSERT INTO t1 SELECT a + 4 , MOD(a + 4 , 20), 1 FROM t1;INSERT INTO t1 SELECT a + 8 , MOD(a + 8 , 20), 1 FROM t1;INSERT INTO t1 SELECT a + 16, MOD(a + 16, 20), 1 FROM t1;INSERT INTO t1 SELECT a + 32, MOD(a + 32, 20), 1 FROM t1;INSERT INTO t1 SELECT a + 64, MOD(a + 64, 20), 1 FROM t1;EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL b 5 NULL 128 EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 128 Using filesortDROP TABLE t1;drop table if exists t1;show variables like 'innodb_rollback_on_timeout';Variable_name Valueinnodb_rollback_on_timeout OFFcreate table t1 (a int unsigned not null primary key) engine = innodb;insert into t1 values (1);commit;begin work;insert into t1 values (2);select * from t1;a12begin work;insert into t1 values (5);select * from t1;a15insert into t1 values (2);ERROR HY000: Lock wait timeout exceeded; try restarting transactionselect * from t1;a15commit;select * from t1;a12commit;select * from t1;a125drop table t1;drop table if exists t1;create table t1 (a int) engine=innodb;alter table t1 alter a set default 1;drop table t1;
Bug#24918 drop table and lock / inconsistent between perm and temp tables
Check transactional tables under LOCK TABLES
drop table if exists t24918, t24918_tmp, t24918_trans, t24918_trans_tmp, t24918_access;create table t24918_access (id int);create table t24918 (id int) engine=myisam;create temporary table t24918_tmp (id int) engine=myisam;create table t24918_trans (id int) engine=innodb;create temporary table t24918_trans_tmp (id int) engine=innodb;lock table t24918 write, t24918_tmp write, t24918_trans write, t24918_trans_tmp write;drop table t24918;select * from t24918_access;ERROR HY000: Table 't24918_access' was not locked with LOCK TABLESdrop table t24918_trans;select * from t24918_access;ERROR HY000: Table 't24918_access' was not locked with LOCK TABLESdrop table t24918_trans_tmp;select * from t24918_access;ERROR HY000: Table 't24918_access' was not locked with LOCK TABLESdrop table t24918_tmp;select * from t24918_access;ERROR HY000: Table 't24918_access' was not locked with LOCK TABLESunlock tables;drop table t24918_access;CREATE TABLE t1 (a int, b int, PRIMARY KEY (a), KEY bkey (b)) ENGINE=InnoDB;INSERT INTO t1 VALUES (1,2),(3,2),(2,2),(4,2),(5,2),(6,2),(7,2),(8,2);INSERT INTO t1 SELECT a + 8, 2 FROM t1;INSERT INTO t1 SELECT a + 16, 1 FROM t1;EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a;id 1select_type SIMPLEtable t1type refpossible_keys bkeykey bkeykey_len 5ref constrows 16Extra Using where; Using indexSELECT * FROM t1 WHERE b=2 ORDER BY a;a b1 22 23 24 25 26 27 28 29 210 211 212 213 214 215 216 2EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;id 1select_type SIMPLEtable t1type rangepossible_keys bkeykey bkeykey_len 5ref NULLrows 16Extra Using where; Using index; Using filesortSELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;a b1 22 23 24 25 26 27 28 29 210 211 212 213 214 215 216 217 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 1EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;id 1select_type SIMPLEtable t1type rangepossible_keys bkeykey bkeykey_len 5ref NULLrows 16Extra Using where; Using indexSELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;a b17 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 11 22 23 24 25 26 27 28 29 210 211 212 213 214 215 216 2CREATE TABLE t2 (a int, b int, c int, PRIMARY KEY (a), KEY bkey (b,c))ENGINE=InnoDB;INSERT INTO t2 VALUES (1,1,1),(3,1,1),(2,1,1),(4,1,1);INSERT INTO t2 SELECT a + 4, 1, 1 FROM t2;INSERT INTO t2 SELECT a + 8, 1, 1 FROM t2;EXPLAIN SELECT * FROM t2 WHERE b=1 ORDER BY a;id 1select_type SIMPLEtable t2type refpossible_keys bkeykey bkeykey_len 5ref constrows 8Extra Using where; Using index; Using filesortSELECT * FROM t2 WHERE b=1 ORDER BY a;a b c1 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 1EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;id 1select_type SIMPLEtable t2type refpossible_keys bkeykey bkeykey_len 10ref const,constrows 8Extra Using where; Using indexSELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;a b c1 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 1EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;id 1select_type SIMPLEtable t2type refpossible_keys bkeykey bkeykey_len 10ref const,constrows 8Extra Using where; Using indexSELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;a b c1 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 1EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;id 1select_type SIMPLEtable t2type refpossible_keys bkeykey bkeykey_len 10ref const,constrows 8Extra Using where; Using indexSELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;a b c1 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 1DROP TABLE t1,t2;CREATE TABLE t1 (a INT, PRIMARY KEY (a)) ENGINE=InnoDB;INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);INSERT INTO t1 SELECT a + 8 FROM t1;INSERT INTO t1 SELECT a + 16 FROM t1;CREATE PROCEDURE p1 ()BEGINDECLARE i INT DEFAULT 50;DECLARE cnt INT;START TRANSACTION;ALTER TABLE t1 ENGINE=InnoDB;COMMIT;START TRANSACTION;WHILE (i > 0) DOSET i = i - 1;SELECT COUNT(*) INTO cnt FROM t1 LOCK IN SHARE MODE;END WHILE;COMMIT;END;|CALL p1();CALL p1();CALL p1();DROP PROCEDURE p1;DROP TABLE t1;create table t1(a text) engine=innodb default charset=utf8;insert into t1 values('aaa');alter table t1 add index(a(1024));Warnings:Warning 1071 Specified key was too long; max key length is 767 bytesWarning 1071 Specified key was too long; max key length is 767 bytesshow create table t1;Table Create Tablet1 CREATE TABLE `t1` ( `a` text, KEY `a` (`a`(255))) ENGINE=InnoDB DEFAULT CHARSET=utf8drop table t1;CREATE TABLE t1 (a INT,b INT,KEY (b)) ENGINE=InnoDB;INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30);START TRANSACTION;SELECT * FROM t1 WHERE b=20 FOR UPDATE;a b2 20START TRANSACTION;SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE;a b1 102 10ROLLBACK;ROLLBACK;DROP TABLE t1;CREATE TABLE t1(a INT, b INT NOT NULL, c INT NOT NULL, d INT, UNIQUE KEY (c,b)) engine=innodb;INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesortSELECT c,b,d FROM t1 GROUP BY c,b,d;c b d1 1 503 1 43 2 40EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 3 SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;c b d1 1 503 1 43 2 40EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesortSELECT c,b,d FROM t1 ORDER BY c,b,d;c b d1 1 503 1 43 2 40EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL c 8 NULL 3 SELECT c,b,d FROM t1 GROUP BY c,b;c b d1 1 503 1 43 2 40EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL c 8 NULL 3 Using indexSELECT c,b FROM t1 GROUP BY c,b;c b1 13 13 2DROP TABLE t1;CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), INDEX b (b)) ENGINE=InnoDB;INSERT INTO t1(a,b) VALUES (1,1), (2,2), (3,2);EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a ASC;id 1select_type SIMPLEtable t1type refpossible_keys bkey bkey_len 5ref constrows 1Extra Using where; Using indexSELECT * FROM t1 WHERE b=2 ORDER BY a ASC;a b2 23 2EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a DESC;id 1select_type SIMPLEtable t1type refpossible_keys bkey bkey_len 5ref constrows 1Extra Using where; Using indexSELECT * FROM t1 WHERE b=2 ORDER BY a DESC;a b3 22 2EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a ASC;id 1select_type SIMPLEtable t1type indexpossible_keys NULLkey bkey_len 5ref NULLrows 3Extra Using indexSELECT * FROM t1 ORDER BY b ASC, a ASC;a b1 12 23 2EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a DESC;id 1select_type SIMPLEtable t1type indexpossible_keys NULLkey bkey_len 5ref NULLrows 3Extra Using indexSELECT * FROM t1 ORDER BY b DESC, a DESC;a b3 22 21 1EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a DESC;id 1select_type SIMPLEtable t1type indexpossible_keys NULLkey bkey_len 5ref NULLrows 3Extra Using index; Using filesortSELECT * FROM t1 ORDER BY b ASC, a DESC;a b1 13 22 2EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a ASC;id 1select_type SIMPLEtable t1type indexpossible_keys NULLkey bkey_len 5ref NULLrows 3Extra Using index; Using filesortSELECT * FROM t1 ORDER BY b DESC, a ASC;a b2 23 21 1DROP TABLE t1;
## Bug#27610: ALTER TABLE ROW_FORMAT=... does not rebuild the table.#
# - prepare;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(c INT)ENGINE = InnoDBROW_FORMAT = COMPACT;
# - initial check;
SELECT table_schema, table_name, row_formatFROM INFORMATION_SCHEMA.TABLESWHERE table_schema = DATABASE() AND table_name = 't1';table_schema table_name row_formattest t1 Compact
# - change ROW_FORMAT and check;
ALTER TABLE t1 ROW_FORMAT = REDUNDANT;
SELECT table_schema, table_name, row_formatFROM INFORMATION_SCHEMA.TABLESWHERE table_schema = DATABASE() AND table_name = 't1';table_schema table_name row_formattest t1 Redundant
# - that's it, cleanup.
DROP TABLE t1;create table t1(a char(10) not null, unique key aa(a(1)),b char(4) not null, unique key bb(b(4))) engine=innodb;desc t1;Field Type Null Key Default Extraa char(10) NO UNI NULL b char(4) NO PRI NULL show create table t1;Table Create Tablet1 CREATE TABLE `t1` ( `a` char(10) NOT NULL, `b` char(4) NOT NULL, UNIQUE KEY `bb` (`b`), UNIQUE KEY `aa` (`a`(1))) ENGINE=InnoDB DEFAULT CHARSET=latin1drop table t1;CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB;INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2);EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL idx NULL NULL NULL 4 Using where; Using filesortSELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;id type d191 member 1NULL member 3NULL member 4DROP TABLE t1;set @my_innodb_autoextend_increment=@@global.innodb_autoextend_increment;set global innodb_autoextend_increment=8;set global innodb_autoextend_increment=@my_innodb_autoextend_increment;set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency;set global innodb_commit_concurrency=0;set global innodb_commit_concurrency=@my_innodb_commit_concurrency;CREATE TABLE t1 (a int, b int, c int, PRIMARY KEY (a), KEY t1_b (b))ENGINE=InnoDB;INSERT INTO t1 (a,b,c) VALUES (1,1,1), (2,1,1), (3,1,1), (4,1,1);INSERT INTO t1 (a,b,c) SELECT a+4,b,c FROM t1;EXPLAIN SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index t1_b PRIMARY 4 NULL 8 Using whereSELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;a b c8 1 17 1 16 1 15 1 14 1 1DROP TABLE t1;DROP TABLE IF EXISTS t1;CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;CREATE INDEX i1 on t1 (a(3));SELECT * FROM t1 WHERE a = 'abcde';aDROP TABLE t1;## BUG #26288: savepoint are not deleted on comit, if the transaction # was otherwise empty#BEGIN;SAVEPOINT s1;COMMIT;RELEASE SAVEPOINT s1;ERROR 42000: SAVEPOINT s1 does not existBEGIN;SAVEPOINT s2;COMMIT;ROLLBACK TO SAVEPOINT s2;ERROR 42000: SAVEPOINT s2 does not existBEGIN;SAVEPOINT s3;ROLLBACK;RELEASE SAVEPOINT s3;ERROR 42000: SAVEPOINT s3 does not existBEGIN;SAVEPOINT s4;ROLLBACK;ROLLBACK TO SAVEPOINT s4;ERROR 42000: SAVEPOINT s4 does not existCREATE TABLE t1 (f1 INTEGER PRIMARY KEY COMMENT 'My ID#', f2 INTEGER DEFAULT NULL, f3 CHAR(10) DEFAULT 'My ID#', CONSTRAINT f2_ref FOREIGN KEY (f2) REFERENCES t1 (f1)) ENGINE=INNODB;SHOW CREATE TABLE t1;Table Create Tablet1 CREATE TABLE `t1` ( `f1` int(11) NOT NULL COMMENT 'My ID#', `f2` int(11) DEFAULT NULL, `f3` char(10) DEFAULT 'My ID#', PRIMARY KEY (`f1`), KEY `f2_ref` (`f2`), CONSTRAINT `f2_ref` FOREIGN KEY (`f2`) REFERENCES `t1` (`f1`)) ENGINE=InnoDB DEFAULT CHARSET=latin1DROP TABLE t1;## Bug #36995: valgrind error in remove_const during subquery executions#create table t1 (a bit(1) not null,b int) engine=myisam;create table t2 (c int) engine=innodb;set @save_optimizer_switch=@@optimizer_switch;set @@optimizer_switch='partial_match_rowid_merge=off,partial_match_table_scan=off';explainselect b from t1 where a not in (select b from t1,t2 group by a) group by a;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables2 DEPENDENT SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 1 set optimizer_switch=@save_optimizer_switch;DROP TABLE t1,t2;End of 5.0 testsCREATE TABLE `t2` (`k` int(11) NOT NULL auto_increment,`a` int(11) default NULL,`c` int(11) default NULL,PRIMARY KEY (`k`),UNIQUE KEY `idx_1` (`a`));insert into t2 ( a ) values ( 6 ) on duplicate key update c =ifnull( c,0 ) + 1;insert into t2 ( a ) values ( 7 ) on duplicate key update c =ifnull( c,0 ) + 1;select last_insert_id();last_insert_id()2select * from t2;k a c1 6 NULL2 7 NULLinsert into t2 ( a ) values ( 6 ) on duplicate key update c =ifnull( c,0 ) + 1;select last_insert_id();last_insert_id()2select last_insert_id(0);last_insert_id(0)0insert into t2 ( a ) values ( 6 ) on duplicate key update c =ifnull( c,0 ) + 1;select last_insert_id();last_insert_id()0select * from t2;k a c1 6 22 7 NULLinsert ignore into t2 values (null,6,1),(10,8,1);select last_insert_id();last_insert_id()0insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1);select last_insert_id();last_insert_id()11select * from t2;k a c1 6 22 7 NULL10 8 111 15 112 20 1insert into t2 ( a ) values ( 6 ) on duplicate key update c =ifnull( c,0 ) + 1, k=last_insert_id(k);select last_insert_id();last_insert_id()1select * from t2;k a c1 6 32 7 NULL10 8 111 15 112 20 1drop table t2;drop table if exists t1, t2;create table t1 (i int);alter table t1 modify i int default 1;alter table t1 modify i int default 2, rename t2;lock table t2 write;alter table t2 modify i int default 3;unlock tables;lock table t2 write;alter table t2 modify i int default 4, rename t1;unlock tables;drop table t1;drop table if exists t1;create table t1 (i int);insert into t1 values ();lock table t1 write;alter table t1 modify i int default 1;insert into t1 values ();select * from t1;iNULL1alter table t1 change i c char(10) default "Two";insert into t1 values ();select * from t1;cNULL1Twounlock tables;select * from t1;cNULL1Twodrop tables t1;create table t1(f1 varchar(5) unique, f2 timestamp NOT NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);insert into t1(f1) values(1);select @a:=f2 from t1;@a:=f2#update t1 set f1=1;select @b:=f2 from t1;@b:=f2#select if(@a=@b,"ok","wrong");if(@a=@b,"ok","wrong")okinsert into t1(f1) values (1) on duplicate key update f1="1";select @b:=f2 from t1;@b:=f2#select if(@a=@b,"ok","wrong");if(@a=@b,"ok","wrong")okinsert into t1(f1) select f1 from t1 on duplicate key update f1="1";select @b:=f2 from t1;@b:=f2#select if(@a=@b,"ok","wrong");if(@a=@b,"ok","wrong")okdrop table t1;SET SESSION AUTOCOMMIT = 0;SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;set binlog_format=mixed;# Switch to connection con1CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(256))ENGINE = InnoDB;INSERT INTO t1 VALUES (1,2);# 1. test for locking:BEGIN;UPDATE t1 SET b = 12 WHERE a = 1;affected rows: 1info: Rows matched: 1 Changed: 1 Warnings: 0SELECT * FROM t1;a b1 12# Switch to connection con2UPDATE t1 SET b = 21 WHERE a = 1;ERROR HY000: Lock wait timeout exceeded; try restarting transaction# Switch to connection con1SELECT * FROM t1;a b1 12ROLLBACK;# 2. test for serialized update:CREATE TABLE t2 (a INT);TRUNCATE t1;INSERT INTO t1 VALUES (1,'init');CREATE PROCEDURE p1()BEGINUPDATE t1 SET b = CONCAT(b, '+con2') WHERE a = 1;INSERT INTO t2 VALUES ();END|BEGIN;UPDATE t1 SET b = CONCAT(b, '+con1') WHERE a = 1;affected rows: 1info: Rows matched: 1 Changed: 1 Warnings: 0SELECT * FROM t1;a b1 init+con1# Switch to connection con2CALL p1;;# Switch to connection con1SELECT * FROM t1;a b1 init+con1COMMIT;SELECT * FROM t1;a b1 init+con1# Switch to connection con2SELECT * FROM t1;a b1 init+con1+con2# Switch to connection con1# 3. test for updated key column:TRUNCATE t1;TRUNCATE t2;INSERT INTO t1 VALUES (1,'init');BEGIN;UPDATE t1 SET a = 2, b = CONCAT(b, '+con1') WHERE a = 1;affected rows: 1info: Rows matched: 1 Changed: 1 Warnings: 0SELECT * FROM t1;a b2 init+con1# Switch to connection con2CALL p1;;# Switch to connection con1SELECT * FROM t1;a b2 init+con1COMMIT;SELECT * FROM t1;a b2 init+con1# Switch to connection con2SELECT * FROM t1;a b2 init+con1DROP PROCEDURE p1;DROP TABLE t1, t2;CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)) engine=innodb;CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),CONSTRAINT c2 FOREIGN KEY f2 (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb;ERROR 42000: Incorrect foreign key definition for 'f2': Key reference and table reference don't matchCREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb;ERROR 42000: Incorrect foreign key definition for 'c2': Key reference and table reference don't matchCREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),CONSTRAINT c1 FOREIGN KEY c2 (c) REFERENCES t1 (a) ON DELETE NO ACTION,CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb;ALTER TABLE t2 DROP FOREIGN KEY c2;DROP TABLE t2;CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),FOREIGN KEY (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb;ERROR 42000: Incorrect foreign key definition for 'foreign key without name': Key reference and table reference don't matchCREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),FOREIGN KEY f1 (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb;ERROR 42000: Incorrect foreign key definition for 'f1': Key reference and table reference don't matchCREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),CONSTRAINT c1 FOREIGN KEY f1 (c) REFERENCES t1 (a) ON DELETE NO ACTION,CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION,FOREIGN KEY f3 (c) REFERENCES t1 (a) ON UPDATE NO ACTION,FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb;SHOW CREATE TABLE t2;Table Create Tablet2 CREATE TABLE `t2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL, PRIMARY KEY (`c`,`d`), CONSTRAINT `c1` FOREIGN KEY (`c`) REFERENCES `t1` (`a`) ON DELETE NO ACTION, CONSTRAINT `c2` FOREIGN KEY (`c`) REFERENCES `t1` (`a`) ON UPDATE NO ACTION, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c`) REFERENCES `t1` (`a`) ON UPDATE NO ACTION, CONSTRAINT `t2_ibfk_2` FOREIGN KEY (`c`) REFERENCES `t1` (`a`) ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=latin1DROP TABLE t2;DROP TABLE t1;create table t1 (a int auto_increment primary key) engine=innodb;alter table t1 order by a;Warnings:Warning 1105 ORDER BY ignored as there is a user-defined clustered index in the table 't1'drop table t1;CREATE TABLE t1(vid integer NOT NULL,tid integer NOT NULL,idx integer NOT NULL,name varchar(128) NOT NULL,type varchar(128) NULL,PRIMARY KEY(idx, vid, tid),UNIQUE(vid, tid, name)) ENGINE=InnoDB;INSERT INTO t1 VALUES(1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL),(5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL),(4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL),(4,1,3,'pk',NULL),(5,1,3,'c2',NULL),(2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL);EXPLAIN SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL PRIMARY 12 NULL 16 Using whereSELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;vid tid idx name type3 1 4 c_extra NULL3 1 3 c2 NULL3 1 2 c1 NULL3 1 1 pk NULLDROP TABLE t1;## Bug #44290: explain crashes for subquery with distinct in# SQL_SELECT::test_quick_select# (reproduced only with InnoDB tables)#CREATE TABLE t1 (c1 INT, c2 INT, c3 INT, KEY (c3), KEY (c2, c3))ENGINE=InnoDB;INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;11EXPLAIN SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY <derived2> system NULL NULL NULL NULL 1 2 DERIVED t1 index c3,c2 c2 10 NULL 5 DROP TABLE t1;CREATE TABLE t1 (c1 REAL, c2 REAL, c3 REAL, KEY (c3), KEY (c2, c3))ENGINE=InnoDB;INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;11EXPLAIN SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY <derived2> system NULL NULL NULL NULL 1 2 DERIVED t1 index c3,c2 c2 18 NULL 5 DROP TABLE t1;CREATE TABLE t1 (c1 DECIMAL(12,2), c2 DECIMAL(12,2), c3 DECIMAL(12,2), KEY (c3), KEY (c2, c3))ENGINE=InnoDB;INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;11EXPLAIN SELECT 1 FROM (SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY <derived2> system NULL NULL NULL NULL 1 2 DERIVED t1 index c3,c2 c2 14 NULL 5 DROP TABLE t1;End of 5.1 testsdrop table if exists t1, t2, t3;create table t1(a int);insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);create table t2 (a int, b int, pk int, key(a,b), primary key(pk)) engine=innodb;insert into t2 select @a:=A.a+10*(B.a + 10*C.a),@a, @a from t1 A, t1 B, t1 C;this must use key 'a', not PRIMARY:explain select a from t2 where a=b;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2 index NULL a 10 NULL # Using where; Using indexdrop table t1, t2;SET SESSION BINLOG_FORMAT=STATEMENT;SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;select @@session.sql_log_bin, @@session.binlog_format, @@session.tx_isolation;@@session.sql_log_bin 1@@session.binlog_format STATEMENT@@session.tx_isolation READ-COMMITTEDCREATE TABLE t1 ( a INT ) ENGINE=InnoDB;INSERT INTO t1 VALUES(1);DROP TABLE t1;DROP TABLE IF EXISTS t1;CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;CREATE INDEX i1 on t1 (a(3));SELECT * FROM t1 WHERE a = 'abcde';aDROP TABLE t1;CREATE TABLE foo (a int, b int, c char(10),PRIMARY KEY (c(3)),KEY b (b)) engine=innodb;CREATE TABLE foo2 (a int, b int, c char(10),PRIMARY KEY (c),KEY b (b)) engine=innodb;CREATE TABLE bar (a int, b int, c char(10),PRIMARY KEY (c(3)),KEY b (b)) engine=myisam;INSERT INTO foo VALUES(1,2,'abcdefghij'), (2,3,''), (3,4,'klmnopqrst'),(4,5,'uvwxyz'), (5,6,'meotnsyglt'), (4,5,'asfdewe');INSERT INTO bar SELECT * FROM foo;INSERT INTO foo2 SELECT * FROM foo;EXPLAIN SELECT c FROM bar WHERE b>2;;id 1select_type SIMPLEtable bartype ALLpossible_keys bkey NULLkey_len NULLref NULLrows 6Extra Using whereEXPLAIN SELECT c FROM foo WHERE b>2;;id 1select_type SIMPLEtable footype ALLpossible_keys bkey NULLkey_len NULLref NULLrows 6Extra Using whereEXPLAIN SELECT c FROM foo2 WHERE b>2;;id 1select_type SIMPLEtable foo2type rangepossible_keys bkey bkey_len 5ref NULLrows 3Extra Using where; Using indexEXPLAIN SELECT c FROM bar WHERE c>2;;id 1select_type SIMPLEtable bartype ALLpossible_keys PRIMARYkey NULLkey_len NULLref NULLrows 6Extra Using whereEXPLAIN SELECT c FROM foo WHERE c>2;;id 1select_type SIMPLEtable footype ALLpossible_keys PRIMARYkey NULLkey_len NULLref NULLrows 6Extra Using whereEXPLAIN SELECT c FROM foo2 WHERE c>2;;id 1select_type SIMPLEtable foo2type indexpossible_keys PRIMARYkey bkey_len 5ref NULLrows 6Extra Using where; Using indexDROP TABLE foo, bar, foo2;DROP TABLE IF EXISTS t1,t3,t2;DROP FUNCTION IF EXISTS f1;CREATE FUNCTION f1() RETURNS VARCHAR(250)BEGINreturn 'hhhhhhh' ;END|CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20), c VARCHAR(20)) ENGINE=INNODB;BEGIN WORK;CREATE TEMPORARY TABLE t2 (a VARCHAR(20), b VARCHAR(20), c varchar(20)) ENGINE=INNODB;CREATE TEMPORARY TABLE t3 LIKE t2;INSERT INTO t1 VALUES ('a','b',NULL),('c','d',NULL),('e','f',NULL);SET @stmt := CONCAT('INSERT INTO t2 SELECT tbl.a, tbl.b, f1()',' FROM t1 tbl');PREPARE stmt1 FROM @stmt;SET @stmt := CONCAT('INSERT INTO t3', ' SELECT * FROM t2');PREPARE stmt3 FROM @stmt;EXECUTE stmt1;COMMIT;DEALLOCATE PREPARE stmt1;DEALLOCATE PREPARE stmt3;DROP TABLE t1,t3,t2;DROP FUNCTION f1;DROP TABLE IF EXISTS t1,t2;CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;CREATE TABLE t2 (id INT PRIMARY KEY,t1_id INT, INDEX par_ind (t1_id),FOREIGN KEY (t1_id) REFERENCES t1(id)) ENGINE=INNODB;INSERT INTO t1 VALUES (1),(2);INSERT INTO t2 VALUES (3,2);SET AUTOCOMMIT = 0;START TRANSACTION;TRUNCATE TABLE t1;ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`))SELECT * FROM t1;id12COMMIT;SELECT * FROM t1;id12START TRANSACTION;TRUNCATE TABLE t1;ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`))SELECT * FROM t1;id12ROLLBACK;SELECT * FROM t1;id12SET AUTOCOMMIT = 1;START TRANSACTION;SELECT * FROM t1;id12COMMIT;TRUNCATE TABLE t1;ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`))SELECT * FROM t1;id12DELETE FROM t2 WHERE id = 3;START TRANSACTION;SELECT * FROM t1;id12TRUNCATE TABLE t1;ROLLBACK;SELECT * FROM t1;idTRUNCATE TABLE t2;DROP TABLE t2;DROP TABLE t1;## Bug#40127 Multiple table DELETE IGNORE hangs on foreign key constraint violation on 5.0#CREATE TABLE t1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=InnoDB;CREATE TABLE t2 (id INT UNSIGNED NOT NULL AUTO_INCREMENT,aid INT UNSIGNED NOT NULL,PRIMARY KEY (id),FOREIGN KEY (aid) REFERENCES t1 (id)) ENGINE=InnoDB;CREATE TABLE t3 (bid INT UNSIGNED NOT NULL,FOREIGN KEY (bid) REFERENCES t2 (id)) ENGINE=InnoDB;CREATE TABLE t4 (a INT) ENGINE=InnoDB;CREATE TABLE t5 (a INT) ENGINE=InnoDB;INSERT INTO t1 (id) VALUES (1);INSERT INTO t2 (id, aid) VALUES (1, 1),(2,1),(3,1),(4,1);INSERT INTO t3 (bid) VALUES (1);INSERT INTO t4 VALUES (1),(2),(3),(4),(5);INSERT INTO t5 VALUES (1);DELETE t5 FROM t4 LEFT JOIN t5 ON t4.a= t5.a;DELETE t2, t1 FROM t2 INNER JOIN t1 ON (t2.aid = t1.id) WHERE t2.id = 1;ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t3`, CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`bid`) REFERENCES `t2` (`id`))DELETE t2, t1 FROM t2 INNER JOIN t1 ON (t2.aid = t1.id) WHERE t2.id = 1;ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t3`, CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`bid`) REFERENCES `t2` (`id`))DELETE IGNORE t2, t1 FROM t2 INNER JOIN t1 ON (t2.aid = t1.id) WHERE t2.id = 1;DROP TABLE t3;DROP TABLE t2;DROP TABLE t1;DROP TABLES t4,t5;# Bug#40127 Multiple table DELETE IGNORE hangs on foreign key constraint violation on 5.0# Testing for any side effects of IGNORE on AFTER DELETE triggers used with# transactional tables.#CREATE TABLE t1 (i INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;CREATE TABLE t2 (a VARCHAR(100)) ENGINE=InnoDB;CREATE TABLE t3 (i INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;CREATE TABLE t4 (i INT NOT NULL PRIMARY KEY, t1i INT, FOREIGN KEY (t1i) REFERENCES t1(i))ENGINE=InnoDB;CREATE TRIGGER trg AFTER DELETE ON t1 FOR EACH ROWBEGINSET @b:='EXECUTED TRIGGER';INSERT INTO t2 VALUES (@b);SET @a:= error_happens_here;END||SET @b:="";SET @a:="";INSERT INTO t1 VALUES (1),(2),(3),(4);INSERT INTO t3 SELECT * FROM t1;** An error in a trigger causes rollback of the statement.DELETE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;ERROR 42S22: Unknown column 'error_happens_here' in 'field list'SELECT @a,@b;@a @b EXECUTED TRIGGERSELECT * FROM t2;aSELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;i i1 12 23 34 4** Same happens with the IGNORE optionDELETE IGNORE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;ERROR 42S22: Unknown column 'error_happens_here' in 'field list'SELECT * FROM t2;aSELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;i i1 12 23 34 4**** The following is an attempt to demonstrate** error handling inside a row iteration.**DROP TRIGGER trg;TRUNCATE TABLE t1;TRUNCATE TABLE t2;TRUNCATE TABLE t3;INSERT INTO t1 VALUES (1),(2),(3),(4);INSERT INTO t3 VALUES (1),(2),(3),(4);INSERT INTO t4 VALUES (3,3),(4,4);CREATE TRIGGER trg AFTER DELETE ON t1 FOR EACH ROWBEGINSET @b:= CONCAT('EXECUTED TRIGGER FOR ROW ',CAST(OLD.i AS CHAR));INSERT INTO t2 VALUES (@b);END||** DELETE is prevented by foreign key constrains but errors are silenced.** The AFTER trigger isn't fired.DELETE IGNORE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;** Tables are modified by best effort:SELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;i i3 34 4** The AFTER trigger was only executed on successful rows:SELECT * FROM t2;aEXECUTED TRIGGER FOR ROW 1EXECUTED TRIGGER FOR ROW 2DROP TRIGGER trg;**** Induce an error midway through an AFTER-trigger**TRUNCATE TABLE t4;TRUNCATE TABLE t1;TRUNCATE TABLE t3;INSERT INTO t1 VALUES (1),(2),(3),(4);INSERT INTO t3 VALUES (1),(2),(3),(4);CREATE TRIGGER trg AFTER DELETE ON t1 FOR EACH ROWBEGINSET @a:= @a+1;IF @a > 2 THENINSERT INTO t4 VALUES (5,5);END IF;END||SET @a:=0;** Errors in the trigger causes the statement to abort.DELETE IGNORE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t4`, CONSTRAINT `t4_ibfk_1` FOREIGN KEY (`t1i`) REFERENCES `t1` (`i`))SELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;i i1 12 23 34 4SELECT * FROM t4;i t1iDROP TRIGGER trg;DROP TABLE t4;DROP TABLE t1;DROP TABLE t2;DROP TABLE t3;CREATE TABLE t1 (a INT, b INT, KEY (a)) ENGINE = INNODB;CREATE TABLE t2 (a INT KEY, b INT, KEY (b)) ENGINE = INNODB;CREATE TABLE t3 (a INT, b INT KEY, KEY (a)) ENGINE = INNODB;CREATE TABLE t4 (a INT KEY, b INT, KEY (b)) ENGINE = INNODB;INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6);INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);INSERT INTO t3 VALUES (1, 101), (2, 102), (3, 103), (4, 104), (5, 105), (6, 106);INSERT INTO t4 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);UPDATE t1, t2 SET t1.a = t1.a + 100, t2.b = t1.a + 10 WHERE t1.a BETWEEN 2 AND 4 AND t2.a = t1.b;SELECT * FROM t2;a b1 12 123 134 145 5UPDATE t3, t4 SET t3.a = t3.a + 100, t4.b = t3.a + 10 WHERE t3.a BETWEEN 2 AND 4 AND t4.a = t3.b - 100;SELECT * FROM t4;a b1 12 123 134 145 5DROP TABLE t1, t2, t3, t4;## Bug#44886: SIGSEGV in test_if_skip_sort_order() -# uninitialized variable used as subscript #CREATE TABLE t1 (a INT, b INT, c INT, d INT, PRIMARY KEY (b), KEY (a,c))ENGINE=InnoDB;INSERT INTO t1 VALUES (1,1,1,0);CREATE TABLE t2 (a INT, b INT, e INT, KEY (e)) ENGINE=InnoDB;INSERT INTO t2 VALUES (1,1,2);CREATE TABLE t3 (a INT, b INT) ENGINE=MyISAM;INSERT INTO t3 VALUES (1, 1);SELECT * FROM t1, t2, t3WHERE t1.a = t3.a AND (t1.b = t3.b OR t1.d) AND t2.b = t1.b AND t2.e = 2GROUP BY t1.b;a b c d a b e a b1 1 1 0 1 1 2 1 1DROP TABLE t1, t2, t3;## Bug #45828: Optimizer won't use partial primary key if another # index can prevent filesort#CREATE TABLE `t1` (c1 int NOT NULL,c2 int NOT NULL,c3 int NOT NULL,PRIMARY KEY (c1,c2),KEY (c3)) ENGINE=InnoDB;INSERT INTO t1 VALUES (5,2,1246276747);INSERT INTO t1 VALUES (2,1,1246281721);INSERT INTO t1 VALUES (7,3,1246281756);INSERT INTO t1 VALUES (4,2,1246282139);INSERT INTO t1 VALUES (3,1,1246282230);INSERT INTO t1 VALUES (1,0,1246282712);INSERT INTO t1 VALUES (8,3,1246282765);INSERT INTO t1 SELECT c1+10,c2+10,c3+10 FROM t1;INSERT INTO t1 SELECT c1+100,c2+100,c3+100 from t1;INSERT INTO t1 SELECT c1+1000,c2+1000,c3+1000 from t1;INSERT INTO t1 SELECT c1+10000,c2+10000,c3+10000 from t1;INSERT INTO t1 SELECT c1+100000,c2+100000,c3+100000 from t1;INSERT INTO t1 SELECT c1+1000000,c2+1000000,c3+1000000 from t1;SELECT * FROM t1 WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;c1 c2 c3EXPLAIN SELECT * FROM t1 WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ref PRIMARY,c3 PRIMARY 4 const 1 Using where; Using filesortEXPLAIN SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ref PRIMARY PRIMARY 4 const 1 Using where; Using filesortCREATE TABLE t2 (c1 int NOT NULL,c2 int NOT NULL,c3 int NOT NULL,KEY (c1,c2),KEY (c3)) ENGINE=InnoDB;explain SELECT * FROM t2 WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2 ref c1,c3 c1 4 const 1 Using where; Using filesortDROP TABLE t1,t2;## 36259: Optimizing with ORDER BY#CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT,b INT NOT NULL,c INT NOT NULL,d VARCHAR(5),e INT NOT NULL,PRIMARY KEY (a), KEY i2 (b,c,d)) ENGINE=InnoDB;INSERT INTO t1 (b,c,d,e) VALUES (1,1,'a',1), (2,2,'b',2);INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;EXPLAIN SELECT * FROM t1 WHERE b=1 AND c=1 ORDER BY a;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ref i2 i2 8 const,const 1 Using where; Using filesortEXPLAIN SELECT * FROM t1 FORCE INDEX(i2) WHERE b=1 and c=1 ORDER BY a;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ref i2 i2 8 const,const 1 Using where; Using filesortEXPLAIN SELECT * FROM t1 FORCE INDEX(PRIMARY) WHERE b=1 AND c=1 ORDER BY a;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL PRIMARY 4 NULL 128 Using whereDROP TABLE t1;## Bug #47963: Wrong results when index is used#CREATE TABLE t1(a VARCHAR(5) NOT NULL, b VARCHAR(5) NOT NULL,c DATETIME NOT NULL,KEY (c) ) ENGINE=InnoDB;INSERT INTO t1 VALUES('TEST', 'TEST', '2009-10-09 00:00:00');SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00' AND c <= '2009-10-09 00:00:00';a b cTEST TEST 2009-10-09 00:00:00SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00.0' AND c <= '2009-10-09 00:00:00.0';a b cTEST TEST 2009-10-09 00:00:00SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00.0' AND c <= '2009-10-09 00:00:00';a b cTEST TEST 2009-10-09 00:00:00SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00' AND c <= '2009-10-09 00:00:00.0';a b cTEST TEST 2009-10-09 00:00:00SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00.000' AND c <= '2009-10-09 00:00:00.000';a b cTEST TEST 2009-10-09 00:00:00SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00.00' AND c <= '2009-10-09 00:00:00.001';a b cTEST TEST 2009-10-09 00:00:00SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00.001' AND c <= '2009-10-09 00:00:00.00';a b cEXPLAIN SELECT * FROM t1 WHERE a = 'TEST' AND c >= '2009-10-09 00:00:00.001' AND c <= '2009-10-09 00:00:00.00';id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tablesDROP TABLE t1;## Bug #46175: NULL read_view and consistent read assertion#CREATE TABLE t1(a CHAR(13),KEY(a)) ENGINE=innodb;CREATE TABLE t2(b DATETIME,KEY(b)) ENGINE=innodb;INSERT INTO t1 VALUES (),();INSERT INTO t2 VALUES (),();CREATE OR REPLACE VIEW v1 AS SELECT 1 FROM t2 WHERE b =(SELECT a FROM t1 LIMIT 1);CREATE PROCEDURE p1(num INT)BEGINDECLARE i INT DEFAULT 0;REPEATSHOW CREATE VIEW v1;SET i:=i+1;UNTIL i>num END REPEAT;END|# Should not crash# Should not crashDROP PROCEDURE p1;DROP VIEW v1;DROP TABLE t1,t2;## Bug #49324: more valgrind errors in test_if_skip_sort_order#CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb ;#should not cause valgrind warningsSELECT 1 FROM t1 JOIN t1 a USING(a) GROUP BY t1.a,t1.a;1DROP TABLE t1;## Bug#50843: Filesort used instead of clustered index led to# performance degradation.#create table t1(f1 int not null primary key, f2 int) engine=innodb;create table t2(f1 int not null, key (f1)) engine=innodb;insert into t1 values (1,1),(2,2),(3,3);insert into t2 values (1),(2),(3);explain select t1.* from t1 left join t2 using(f1) group by t1.f1;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 index NULL PRIMARY 4 NULL 3 1 SIMPLE t2 ref f1 f1 4 test.t1.f1 1 Using indexdrop table t1,t2;### Bug #39653: find_shortest_key in sql_select.cc does not consider# clustered primary keys#CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c INT, d INT, e INT, f INT,KEY (b,c)) ENGINE=INNODB;INSERT INTO t1 VALUES (1,1,1,1,1,1), (2,2,2,2,2,2), (3,3,3,3,3,3),(4,4,4,4,4,4), (5,5,5,5,5,5), (6,6,6,6,6,6),(7,7,7,7,7,7), (8,8,8,8,8,8), (9,9,9,9,9,9),(11,11,11,11,11,11);EXPLAIN SELECT COUNT(*) FROM t1;id 1select_type SIMPLEtable t1type indexpossible_keys NULLkey PRIMARYkey_len 4ref NULLrows 10Extra Using indexDROP TABLE t1;## Bug #49838: DROP INDEX and ADD UNIQUE INDEX for same index may# corrupt definition at engine#CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, KEY k (a,b)) ENGINE=InnoDB;ALTER TABLE t1 DROP INDEX k, ADD UNIQUE INDEX k (a,b);SHOW INDEXES FROM t1;;Table t1Non_unique 0Key_name kSeq_in_index 1Column_name aCollation ACardinality 0Sub_part NULLPacked NULLNull Index_type BTREEComment Table t1Non_unique 0Key_name kSeq_in_index 2Column_name bCollation ACardinality 0Sub_part NULLPacked NULLNull Index_type BTREEComment DROP TABLE t1;## Bug #47453: InnoDB incorrectly changes TIMESTAMP columns when # JOINed during an UPDATE#CREATE TABLE t1 (d INT) ENGINE=InnoDB;CREATE TABLE t2 (a INT, b INT, c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB;set up our data elementsINSERT INTO t1 (d) VALUES (1);INSERT INTO t2 (a,b) VALUES (1,1);SELECT SECOND(c) INTO @bug47453 FROM t2;SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a;SECOND(c)-@bug474530UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1;SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a;SECOND(c)-@bug474530SELECT SLEEP(1);SLEEP(1)0UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1;#should be 0SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a;SECOND(c)-@bug474530DROP TABLE t1, t2;## Bug#38999 valgrind warnings for update statement in function compare_record()#CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;INSERT INTO t1 values (1),(2),(3),(4),(5);INSERT INTO t2 values (1);SELECT * FROM t1 WHERE a = 2;a2UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;DROP TABLE t1,t2;End of 5.1 tests
|