📄 innodb.test
字号:
connection default;disconnect a;disconnect b;## BUG 14056 Column prefix index on UTF-8 primary key column causes: Can't find record..#create table t1 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))) character set utf8 engine = innodb;create table t2 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))) character set ucs2 engine = innodb;insert into t1 values (1,'abcdefg','abcdefg','one');insert into t1 values (2,'ijkilmn','ijkilmn','two');insert into t1 values (3,'qrstuvw','qrstuvw','three');insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');insert into t2 values (1,'abcdefg','abcdefg','one');insert into t2 values (2,'ijkilmn','ijkilmn','two');insert into t2 values (3,'qrstuvw','qrstuvw','three');insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');update t1 set filler = 'boo' where a = 1;update t2 set filler ='email' where a = 4;select a,hex(b),hex(c),filler from t1 order by filler;select a,hex(b),hex(c),filler from t2 order by filler;drop table t1;drop table t2;create table t1 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))) character set utf8 engine = innodb;create table t2 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))) character set ucs2 engine = innodb;insert into t1 values (1,'abcdefg','abcdefg','one');insert into t1 values (2,'ijkilmn','ijkilmn','two');insert into t1 values (3,'qrstuvw','qrstuvw','three');insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');insert into t2 values (1,'abcdefg','abcdefg','one');insert into t2 values (2,'ijkilmn','ijkilmn','two');insert into t2 values (3,'qrstuvw','qrstuvw','three');insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');update t1 set filler = 'boo' where a = 1;update t2 set filler ='email' where a = 4;select a,hex(b),hex(c),filler from t1 order by filler;select a,hex(b),hex(c),filler from t2 order by filler;drop table t1;drop table t2;create table t1 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))) character set utf8 engine = innodb;create table t2 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))) character set ucs2 engine = innodb;insert into t1 values (1,'abcdefg','abcdefg','one');insert into t1 values (2,'ijkilmn','ijkilmn','two');insert into t1 values (3,'qrstuvw','qrstuvw','three');insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');insert into t2 values (1,'abcdefg','abcdefg','one');insert into t2 values (2,'ijkilmn','ijkilmn','two');insert into t2 values (3,'qrstuvw','qrstuvw','three');insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');update t1 set filler = 'boo' where a = 1;update t2 set filler ='email' where a = 4;select a,hex(b),hex(c),filler from t1 order by filler;select a,hex(b),hex(c),filler from t2 order by filler;drop table t1;drop table t2;create table t1 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))) character set utf8 engine = innodb;create table t2 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))) character set ucs2 engine = innodb;insert into t1 values (1,'abcdefg','abcdefg','one');insert into t1 values (2,'ijkilmn','ijkilmn','two');insert into t1 values (3,'qrstuvw','qrstuvw','three');insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');insert into t2 values (1,'abcdefg','abcdefg','one');insert into t2 values (2,'ijkilmn','ijkilmn','two');insert into t2 values (3,'qrstuvw','qrstuvw','three');insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');update t1 set filler = 'boo' where a = 1;update t2 set filler ='email' where a = 4;select a,hex(b),hex(c),filler from t1 order by filler;select a,hex(b),hex(c),filler from t2 order by filler;drop table t1;drop table t2;commit;# tests for bugs #9802 and #13778# test that FKs between invalid types are not acceptedset foreign_key_checks=0;create table t2 (a int primary key, b int, foreign key (b) references t1(a)) engine = innodb;--replace_result $MYSQLTEST_VARDIR . master-data/ ''-- error 1005create table t1(a char(10) primary key, b varchar(20)) engine = innodb;set foreign_key_checks=1;drop table t2;# test that FKs between different charsets are not accepted in CREATE even# when f_k_c is 0set foreign_key_checks=0;create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1;--replace_result $MYSQLTEST_VARDIR . master-data/ ''-- error 1005create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=utf8;set foreign_key_checks=1;drop table t1;# test that invalid datatype conversions with ALTER are not allowedset foreign_key_checks=0;create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb;create table t1(a varchar(10) primary key) engine = innodb;-- error 1025,1025alter table t1 modify column a int;set foreign_key_checks=1;drop table t2,t1;# test that charset conversions with ALTER are allowed when f_k_c is 0set foreign_key_checks=0;create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1;create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1;alter table t1 convert to character set utf8;set foreign_key_checks=1;drop table t2,t1;# test that RENAME does not allow invalid charsets when f_k_c is 0set foreign_key_checks=0;create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1;create table t3(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=utf8;--replace_result $MYSQLTEST_VARDIR . master-data/ ''-- error 1025rename table t3 to t1;set foreign_key_checks=1;drop table t2,t3;# test that foreign key errors are reported correctly (Bug #15550)create table t1(a int primary key) row_format=redundant engine=innodb;create table t2(a int primary key,constraint foreign key(a)references t1(a)) row_format=compact engine=innodb;create table t3(a int primary key) row_format=compact engine=innodb;create table t4(a int primary key,constraint foreign key(a)references t3(a)) row_format=redundant engine=innodb;insert into t1 values(1);insert into t3 values(1);-- error 1452insert into t2 values(2);-- error 1452insert into t4 values(2);insert into t2 values(1);insert into t4 values(1);-- error 1451update t1 set a=2;-- error 1452update t2 set a=2;-- error 1451update t3 set a=2;-- error 1452update t4 set a=2;-- error 1451truncate t1;-- error 1451truncate t3;truncate t2;truncate t4;truncate t1;truncate t3;drop table t4,t3,t2,t1;## Test that we can create a large (>1K) key#create table t1 (a varchar(255) character set utf8, b varchar(255) character set utf8, c varchar(255) character set utf8, d varchar(255) character set utf8, key (a,b,c,d)) engine=innodb;drop table t1;--error ER_TOO_LONG_KEYcreate table t1 (a varchar(255) character set utf8, b varchar(255) character set utf8, c varchar(255) character set utf8, d varchar(255) character set utf8, e varchar(255) character set utf8, key (a,b,c,d,e)) engine=innodb;# test the padding of BINARY types and collations (Bug #14189)create table t1 (s1 varbinary(2),primary key (s1)) engine=innodb;create table t2 (s1 binary(2),primary key (s1)) engine=innodb;create table t3 (s1 varchar(2) binary,primary key (s1)) engine=innodb;create table t4 (s1 char(2) binary,primary key (s1)) engine=innodb;insert into t1 values (0x41),(0x4120),(0x4100);-- error 1062insert into t2 values (0x41),(0x4120),(0x4100);insert into t2 values (0x41),(0x4120);-- error 1062insert into t3 values (0x41),(0x4120),(0x4100);insert into t3 values (0x41),(0x4100);-- error 1062insert into t4 values (0x41),(0x4120),(0x4100);insert into t4 values (0x41),(0x4100);select hex(s1) from t1;select hex(s1) from t2;select hex(s1) from t3;select hex(s1) from t4;drop table t1,t2,t3,t4;create table t1 (a int primary key,s1 varbinary(3) not null unique) engine=innodb;create table t2 (s1 binary(2) not null, constraint c foreign key(s1) references t1(s1) on update cascade) engine=innodb;insert into t1 values(1,0x4100),(2,0x41),(3,0x4120),(4,0x42);-- error 1452insert into t2 values(0x42);insert into t2 values(0x41);select hex(s1) from t2;update t1 set s1=0x123456 where a=2;select hex(s1) from t2;-- error 1451update t1 set s1=0x12 where a=1;-- error 1451update t1 set s1=0x12345678 where a=1;-- error 1451update t1 set s1=0x123457 where a=1;update t1 set s1=0x1220 where a=1;select hex(s1) from t2;update t1 set s1=0x1200 where a=1;select hex(s1) from t2;update t1 set s1=0x4200 where a=1;select hex(s1) from t2;-- error 1451delete from t1 where a=1;delete from t1 where a=2;update t2 set s1=0x4120;-- error 1451delete from t1;delete from t1 where a!=3;select a,hex(s1) from t1;select hex(s1) from t2;drop table t2,t1;create table t1 (a int primary key,s1 varchar(2) binary not null unique) engine=innodb;create table t2 (s1 char(2) binary not null, constraint c foreign key(s1) references t1(s1) on update cascade) engine=innodb;insert into t1 values(1,0x4100),(2,0x41);insert into t2 values(0x41);select hex(s1) from t2;update t1 set s1=0x1234 where a=1;select hex(s1) from t2;update t1 set s1=0x12 where a=2;select hex(s1) from t2;delete from t1 where a=1;-- error 1451delete from t1 where a=2;select a,hex(s1) from t1;select hex(s1) from t2;drop table t2,t1;## Test cases for bug #15308 Problem of Order with Enum Column in Primary Key#CREATE TABLE t1 ( ind enum('0','1','2') NOT NULL default '0', string1 varchar(250) NOT NULL, PRIMARY KEY (ind)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE t2 ( ind enum('0','1','2') NOT NULL default '0', string1 varchar(250) NOT NULL, PRIMARY KEY (ind)) ENGINE=InnoDB DEFAULT CHARSET=ucs2;INSERT INTO t1 VALUES ('1', ''),('2', '');INSERT INTO t2 VALUES ('1', ''),('2', '');SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;drop table t1,t2;CREATE TABLE t1 ( ind set('0','1','2') NOT NULL default '0', string1 varchar(250) NOT NULL, PRIMARY KEY (ind)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE t2 ( ind set('0','1','2') NOT NULL default '0', string1 varchar(250) NOT NULL, PRIMARY KEY (ind)) ENGINE=InnoDB DEFAULT CHARSET=ucs2;INSERT INTO t1 VALUES ('1', ''),('2', '');INSERT INTO t2 VALUES ('1', ''),('2', '');SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;drop table t1,t2;CREATE TABLE t1 ( ind bit not null, string1 varchar(250) NOT NULL, PRIMARY KEY (ind)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE t2 ( ind bit not null, string1 varchar(250) NOT NULL, PRIMARY KEY (ind)) ENGINE=InnoDB DEFAULT CHARSET=ucs2;insert into t1 values(0,''),(1,'');insert into t2 values(0,''),(1,'');select hex(ind),hex(string1) from t1 order by string1;select hex(ind),hex(string1) from t2 order by string1;drop table t1,t2;# tests for bug #14056 Column prefix index on UTF-8 primary key column causes 'Can't find record..'create table t2 ( a int, b char(10), filler char(10), primary key(a, b(2)) ) character set utf8 engine = innodb;insert into t2 values (1,'abcdefg','one');insert into t2 values (2,'ijkilmn','two');insert into t2 values (3, 'qrstuvw','three');update t2 set a=5, filler='booo' where a=1;drop table t2;create table t2 ( a int, b char(10), filler char(10), primary key(a, b(2)) ) character set ucs2 engine = innodb;insert into t2 values (1,'abcdefg','one');insert into t2 values (2,'ijkilmn','two');insert into t2 values (3, 'qrstuvw','three');update t2 set a=5, filler='booo' where a=1;drop table t2;create table t1(a int not null, b char(110),primary key(a,b(100))) engine=innodb default charset=utf8;insert into t1 values(1,'abcdefg'),(2,'defghijk');insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);select a,hex(b) from t1 order by b;update t1 set b = 'three' where a = 6;drop table t1;create table t1(a int not null, b text(110),primary key(a,b(100))) engine=innodb default charset=utf8;insert into t1 values(1,'abcdefg'),(2,'defghijk');insert into t1 values(6,_utf8 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -