1232 lines
44 KiB
Plaintext
1232 lines
44 KiB
Plaintext
drop table if exists t1,t2,t3;
|
||
SET SQL_WARNINGS=1;
|
||
CREATE TABLE t1 (
|
||
ID CHAR(32) NOT NULL,
|
||
name CHAR(32) NOT NULL,
|
||
value CHAR(255),
|
||
INDEX indexIDname (ID(8),name(8))
|
||
) ;
|
||
INSERT INTO t1 VALUES
|
||
('keyword','indexdir','/export/home/local/www/database/indexes/keyword');
|
||
INSERT INTO t1 VALUES ('keyword','urlprefix','text/ /text');
|
||
INSERT INTO t1 VALUES ('keyword','urlmap','/text/ /');
|
||
INSERT INTO t1 VALUES ('keyword','attr','personal employee company');
|
||
INSERT INTO t1 VALUES
|
||
('emailgids','indexdir','/export/home/local/www/database/indexes/emailgids');
|
||
INSERT INTO t1 VALUES ('emailgids','urlprefix','text/ /text');
|
||
INSERT INTO t1 VALUES ('emailgids','urlmap','/text/ /');
|
||
INSERT INTO t1 VALUES ('emailgids','attr','personal employee company');
|
||
SELECT value FROM t1 WHERE ID='emailgids' AND name='attr';
|
||
value
|
||
personal employee company
|
||
drop table t1;
|
||
CREATE TABLE t1 (
|
||
price int(5) DEFAULT '0' NOT NULL,
|
||
area varchar(40) DEFAULT '' NOT NULL,
|
||
type varchar(40) DEFAULT '' NOT NULL,
|
||
transityes enum('Y','N') DEFAULT 'Y' NOT NULL,
|
||
shopsyes enum('Y','N') DEFAULT 'Y' NOT NULL,
|
||
schoolsyes enum('Y','N') DEFAULT 'Y' NOT NULL,
|
||
petsyes enum('Y','N') DEFAULT 'Y' NOT NULL,
|
||
KEY price (price,area,type,transityes,shopsyes,schoolsyes,petsyes)
|
||
);
|
||
Warnings:
|
||
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','N','N','N','N');
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','N','N','N','N');
|
||
INSERT IGNORE INTO t1 VALUES (900,'Vancouver','Shared/Roomate','','','','');
|
||
Warnings:
|
||
Warning 1265 Data truncated for column 'transityes' at row 1
|
||
Warning 1265 Data truncated for column 'shopsyes' at row 1
|
||
Warning 1265 Data truncated for column 'schoolsyes' at row 1
|
||
Warning 1265 Data truncated for column 'petsyes' at row 1
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','Y','Y','Y','Y');
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','Y','Y','Y','Y');
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','Y','Y','Y','Y');
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','Y','Y','Y','Y');
|
||
INSERT INTO t1 VALUES (900,'Vancouver','Shared/Roomate','Y','Y','Y','Y');
|
||
SELECT * FROM t1 WHERE area='Vancouver' and transityes='y' and schoolsyes='y' and ( ((type='1 Bedroom' or type='Studio/Bach') and (price<=500)) or ((type='2 Bedroom') and (price<=550)) or ((type='Shared/Roomate') and (price<=300)) or ((type='Room and Board') and (price<=500)) ) and price <= 400;
|
||
price area type transityes shopsyes schoolsyes petsyes
|
||
drop table t1;
|
||
CREATE TABLE t1 (program enum('signup','unique','sliding') not null, type enum('basic','sliding','signup'), sites set('mt'), PRIMARY KEY (program));
|
||
ALTER TABLE t1 modify program enum('signup','unique','sliding');
|
||
drop table t1;
|
||
CREATE TABLE t1 (
|
||
name varchar(50) DEFAULT '' NOT NULL,
|
||
author varchar(50) DEFAULT '' NOT NULL,
|
||
category decimal(10,0) DEFAULT '0' NOT NULL,
|
||
email varchar(50),
|
||
password varchar(50),
|
||
proxy varchar(50),
|
||
bitmap varchar(20),
|
||
msg varchar(255),
|
||
urlscol varchar(127),
|
||
urlhttp varchar(127),
|
||
timeout decimal(10,0),
|
||
nbcnx decimal(10,0),
|
||
creation decimal(10,0),
|
||
livinguntil decimal(10,0),
|
||
lang decimal(10,0),
|
||
type decimal(10,0),
|
||
subcat decimal(10,0),
|
||
subtype decimal(10,0),
|
||
reg char(1),
|
||
scs varchar(255),
|
||
capacity decimal(10,0),
|
||
userISP varchar(50),
|
||
CCident varchar(50) DEFAULT '' NOT NULL,
|
||
PRIMARY KEY (name,author,category)
|
||
);
|
||
INSERT INTO t1 VALUES
|
||
('patnom','patauteur',0,'p.favre@cryo-networks.fr',NULL,NULL,'#p2sndnq6ae5g1u6t','essai salut','scol://195.242.78.119:patauteur.patnom',NULL,NULL,NULL,950036174,-882087474,NULL,3,0,3,'1','Pub/patnom/futur_divers.scs',NULL,'pat','CC1');
|
||
INSERT INTO t1 VALUES
|
||
('LeNomDeMonSite','Marc',0,'m.barilley@cryo-networks.fr',NULL,NULL,NULL,NULL,'scol://195.242.78.119:Marc.LeNomDeMonSite',NULL,NULL,NULL,950560434,-881563214,NULL,3,0,3,'1','Pub/LeNomDeMonSite/domus_hibere.scs',NULL,'Marq','CC1');
|
||
select * from t1 where name='patnom' and author='patauteur' and category=0;
|
||
name author category email password proxy bitmap msg urlscol urlhttp timeout nbcnx creation livinguntil lang type subcat subtype reg scs capacity userISP CCident
|
||
patnom patauteur 0 p.favre@cryo-networks.fr NULL NULL #p2sndnq6ae5g1u6t essai salut scol://195.242.78.119:patauteur.patnom NULL NULL NULL 950036174 -882087474 NULL 3 0 3 1 Pub/patnom/futur_divers.scs NULL pat CC1
|
||
drop table t1;
|
||
create table t1
|
||
(
|
||
name_id int not null auto_increment,
|
||
name blob,
|
||
INDEX name_idx (name(5)),
|
||
primary key (name_id)
|
||
);
|
||
INSERT t1 VALUES(NULL,'/');
|
||
INSERT t1 VALUES(NULL,'[T,U]_axpby');
|
||
SELECT * FROM t1 WHERE name='[T,U]_axpy';
|
||
name_id name
|
||
SELECT * FROM t1 WHERE name='[T,U]_axpby';
|
||
name_id name
|
||
2 [T,U]_axpby
|
||
create table t2
|
||
(
|
||
name_id int not null auto_increment,
|
||
name char(255) binary,
|
||
INDEX name_idx (name(5)),
|
||
primary key (name_id)
|
||
);
|
||
Warnings:
|
||
Warning 1287 'BINARY as attribute of a type' is deprecated and will be removed in a future release. Please use a CHARACTER SET clause with _bin collation instead
|
||
INSERT t2 select * from t1;
|
||
SELECT * FROM t2 WHERE name='[T,U]_axpy';
|
||
name_id name
|
||
SELECT * FROM t2 WHERE name='[T,U]_axpby';
|
||
name_id name
|
||
2 [T,U]_axpby
|
||
CREATE TABLE t3 SELECT * FROM t2 WHERE name='[T,U]_axpby';
|
||
SELECT * FROM t2 WHERE name='[T,U]_axpby';
|
||
name_id name
|
||
2 [T,U]_axpby
|
||
drop table t1,t2,t3;
|
||
create table t1
|
||
(
|
||
SEQNO numeric(12 ) not null,
|
||
MOTYPEID numeric(12 ) not null,
|
||
MOINSTANCEID numeric(12 ) not null,
|
||
ATTRID numeric(12 ) not null,
|
||
VALUE varchar(120) not null,
|
||
primary key (SEQNO, MOTYPEID, MOINSTANCEID, ATTRID, VALUE )
|
||
);
|
||
INSERT INTO t1 VALUES (1, 1, 1, 1, 'a');
|
||
INSERT INTO t1 VALUES (1, 1, 1, 1, 'b');
|
||
INSERT INTO t1 VALUES (1, 1, 1, 1, 'a');
|
||
ERROR 23000: Duplicate entry '1-1-1-1-a' for key 'PRIMARY'
|
||
drop table t1;
|
||
CREATE TABLE t1 (
|
||
a tinytext NOT NULL,
|
||
b tinyint(3) unsigned NOT NULL default '0',
|
||
PRIMARY KEY (a(32),b)
|
||
) ENGINE=MyISAM;
|
||
Warnings:
|
||
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
||
INSERT INTO t1 VALUES ('a',1),('a',2);
|
||
SELECT * FROM t1 WHERE a='a' AND b=2;
|
||
a b
|
||
a 2
|
||
SELECT * FROM t1 WHERE a='a' AND b in (2);
|
||
a b
|
||
a 2
|
||
SELECT * FROM t1 WHERE a='a' AND b in (1,2);
|
||
a b
|
||
a 1
|
||
a 2
|
||
drop table t1;
|
||
create table t1 (a int not null unique, b int unique, c int, d int not null primary key, key(c), e int not null unique);
|
||
analyze table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 analyze status OK
|
||
show keys from t1;
|
||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Visible Expression
|
||
t1 0 PRIMARY 1 d A 0 NULL NULL SE_SPECIFIC YES NULL
|
||
t1 0 a 1 a A 0 NULL NULL SE_SPECIFIC YES NULL
|
||
t1 0 e 1 e A 0 NULL NULL SE_SPECIFIC YES NULL
|
||
t1 0 b 1 b A 0 NULL NULL YES SE_SPECIFIC YES NULL
|
||
t1 1 c 1 c A 0 NULL NULL YES SE_SPECIFIC YES NULL
|
||
drop table t1;
|
||
CREATE TABLE t1 (c CHAR(10) NOT NULL,i INT NOT NULL AUTO_INCREMENT,
|
||
UNIQUE (c,i)) ENGINE=MYISAM;
|
||
INSERT IGNORE INTO t1 (c) VALUES (NULL),(NULL);
|
||
Warnings:
|
||
Warning 1048 Column 'c' cannot be null
|
||
SELECT * FROM t1;
|
||
c i
|
||
1
|
||
2
|
||
INSERT INTO t1 (c) VALUES ('a'),('a');
|
||
SELECT * FROM t1;
|
||
c i
|
||
1
|
||
2
|
||
a 1
|
||
a 2
|
||
DROP TABLE IF EXISTS t1;
|
||
CREATE TABLE t1 (c CHAR(10) NULL, i INT NOT NULL AUTO_INCREMENT,
|
||
UNIQUE (c,i)) ENGINE=MYISAM;
|
||
INSERT INTO t1 (c) VALUES (NULL),(NULL);
|
||
SELECT * FROM t1;
|
||
c i
|
||
NULL 1
|
||
NULL 2
|
||
INSERT INTO t1 (c) VALUES ('a'),('a');
|
||
SELECT * FROM t1;
|
||
c i
|
||
NULL 1
|
||
NULL 2
|
||
a 1
|
||
a 2
|
||
drop table t1;
|
||
create table t1 (i int, a char(200), b text, unique (a), unique (b(300))) charset utf8 row_format=dynamic engine=innodb;
|
||
Warnings:
|
||
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
||
insert ignore t1 values (1, repeat('a',210), repeat('b', 310));
|
||
Warnings:
|
||
Warning 1265 Data truncated for column 'a' at row 1
|
||
insert ignore t1 values (2, repeat(0xD0B1,215), repeat(0xD0B1, 310));
|
||
Warnings:
|
||
Warning 1265 Data truncated for column 'a' at row 1
|
||
select i, length(a), length(b), char_length(a), char_length(b) from t1;
|
||
i length(a) length(b) char_length(a) char_length(b)
|
||
1 200 310 200 310
|
||
2 400 620 200 310
|
||
select i from t1 where a=repeat(_utf8 'a',200);
|
||
i
|
||
1
|
||
Warnings:
|
||
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
||
select i from t1 where a=repeat(_utf8 0xD0B1,200);
|
||
i
|
||
2
|
||
Warnings:
|
||
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
||
select i from t1 where b=repeat(_utf8 'b',310);
|
||
i
|
||
1
|
||
Warnings:
|
||
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
||
drop table t1;
|
||
CREATE TABLE t1 (id int unsigned auto_increment, name char(50), primary key (id)) engine=myisam;
|
||
insert into t1 (name) values ('a'), ('b'),('c'),('d'),('e'),('f'),('g');
|
||
explain select 1 from t1 where id =2;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` where true
|
||
explain select 1 from t1 where id =2 or id=3;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL range PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` where ((`test`.`t1`.`id` = 2) or (`test`.`t1`.`id` = 3))
|
||
explain select name from t1 where id =2;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL const PRIMARY PRIMARY 4 const 1 100.00 NULL
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select 'b' AS `name` from `test`.`t1` where true
|
||
ALTER TABLE t1 DROP PRIMARY KEY, ADD INDEX (id);
|
||
explain select 1 from t1 where id =2;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL ref id id 4 const 1 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`id` = 2)
|
||
drop table t1;
|
||
CREATE TABLE t1 (numeropost mediumint(8) unsigned NOT NULL default '0', numreponse int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (numeropost,numreponse), UNIQUE KEY numreponse (numreponse));
|
||
Warnings:
|
||
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
||
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
||
INSERT INTO t1 (numeropost,numreponse) VALUES ('1','1'),('1','2'),('2','3'),('2','4');
|
||
SELECT numeropost FROM t1 WHERE numreponse='1';
|
||
numeropost
|
||
1
|
||
EXPLAIN SELECT numeropost FROM t1 WHERE numreponse='1';
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL const numreponse numreponse 4 const 1 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select '1' AS `numeropost` from `test`.`t1` where true
|
||
FLUSH TABLES;
|
||
SELECT numeropost FROM t1 WHERE numreponse='1';
|
||
numeropost
|
||
1
|
||
drop table t1;
|
||
create table t1 (c varchar(30), t text, unique (c(2)), unique (t(3))) charset utf8 engine=myisam;
|
||
Warnings:
|
||
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`c` varchar(30) DEFAULT NULL,
|
||
`t` text,
|
||
UNIQUE KEY `c` (`c`(2)),
|
||
UNIQUE KEY `t` (`t`(3))
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||
insert t1 values ('cccc', 'tttt'),
|
||
(0xD0B1212223D0B1D0B1D0B1D0B1D0B1, 0xD0B1D0B1212223D0B1D0B1D0B1D0B1),
|
||
(0xD0B1222123D0B1D0B1D0B1D0B1D0B1, 0xD0B1D0B1222123D0B1D0B1D0B1D0B1);
|
||
insert t1 (c) values ('cc22');
|
||
ERROR 23000: Duplicate entry 'cc' for key 'c'
|
||
insert t1 (t) values ('ttt22');
|
||
ERROR 23000: Duplicate entry 'ttt' for key 't'
|
||
insert t1 (c) values (0xD0B1212322D0B1D0B1D0B1D0B1D0B1);
|
||
ERROR 23000: Duplicate entry 'б!' for key 'c'
|
||
insert t1 (t) values (0xD0B1D0B1212322D0B1D0B1D0B1D0B1);
|
||
ERROR 23000: Duplicate entry 'бб!' for key 't'
|
||
select c from t1 where c='cccc';
|
||
c
|
||
cccc
|
||
select t from t1 where t='tttt';
|
||
t
|
||
tttt
|
||
select c from t1 where c=0xD0B1212223D0B1D0B1D0B1D0B1D0B1;
|
||
c
|
||
б!"#ббббб
|
||
select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1;
|
||
t
|
||
бб!"#бббб
|
||
drop table t1;
|
||
DROP TABLE IF EXISTS t1;
|
||
Warnings:
|
||
Note 1051 Unknown table 'test.t1'
|
||
CREATE TABLE t1 (
|
||
c1 int,
|
||
c2 varbinary(240),
|
||
UNIQUE KEY (c1),
|
||
KEY (c2)
|
||
) ENGINE=MyISAM;
|
||
INSERT INTO t1 VALUES (1,'\Z\Z\Z\Z');
|
||
INSERT INTO t1 VALUES (2,'\Z\Z\Z\Z\Z\Z');
|
||
INSERT INTO t1 VALUES (3,'\Z\Z\Z\Z');
|
||
select c1 from t1 where c2='\Z\Z\Z\Z';
|
||
c1
|
||
1
|
||
3
|
||
DELETE FROM t1 WHERE (c1 = 1);
|
||
check table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
select c1 from t1 where c2='\Z\Z\Z\Z';
|
||
c1
|
||
3
|
||
DELETE FROM t1 WHERE (c1 = 3);
|
||
check table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
select c1 from t1 where c2='\Z\Z\Z\Z';
|
||
c1
|
||
truncate table t1;
|
||
insert into t1 values(1,"aaaa"),(2,"aaab"),(3,"aaac"),(4,"aaccc");
|
||
delete from t1 where c1=3;
|
||
delete from t1 where c1=1;
|
||
delete from t1 where c1=4;
|
||
check table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
drop table t1;
|
||
create table t1 (c char(10), index (c(0)));
|
||
ERROR HY000: Key part 'c' length cannot be 0
|
||
create table t1 (c char(10), index (c,c));
|
||
ERROR 42S21: Duplicate column name 'c'
|
||
create table t1 (c1 char(10), c2 char(10), index (c1,c2,c1));
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
create table t1 (c1 char(10), c2 char(10), index (c1,c1,c2));
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
create table t1 (c1 char(10), c2 char(10), index (c2,c1,c1));
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
create table t1 (c1 char(10), c2 char(10));
|
||
alter table t1 add key (c1,c1);
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
alter table t1 add key (c2,c1,c1);
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
alter table t1 add key (c1,c2,c1);
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
alter table t1 add key (c1,c1,c2);
|
||
ERROR 42S21: Duplicate column name 'c1'
|
||
drop table t1;
|
||
create table t1 (
|
||
i1 INT NOT NULL,
|
||
i2 INT NOT NULL,
|
||
UNIQUE i1idx (i1),
|
||
UNIQUE i2idx (i2)) charset utf8mb4;
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
i1 int(11) NO PRI NULL
|
||
i2 int(11) NO UNI NULL
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`i1` int(11) NOT NULL,
|
||
`i2` int(11) NOT NULL,
|
||
UNIQUE KEY `i1idx` (`i1`),
|
||
UNIQUE KEY `i2idx` (`i2`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
drop table t1;
|
||
create table t1 (
|
||
c1 int,
|
||
c2 varchar(20) not null,
|
||
primary key (c1),
|
||
key (c2(10))
|
||
) engine=myisam;
|
||
insert into t1 values (1,'');
|
||
insert into t1 values (2,' \t\tTest String');
|
||
insert into t1 values (3,' \n\tTest String');
|
||
update t1 set c2 = 'New Test String' where c1 = 1;
|
||
select * from t1;
|
||
c1 c2
|
||
1 New Test String
|
||
2 Test String
|
||
3
|
||
Test String
|
||
drop table t1;
|
||
create table t1 (a varchar(10), b varchar(10), key(a(10),b(10))) charset utf8mb4;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||
`b` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||
KEY `a` (`a`,`b`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
alter table t1 modify b varchar(20);
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||
`b` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||
KEY `a` (`a`,`b`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
alter table t1 modify a varchar(20);
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||
`b` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||
KEY `a` (`a`,`b`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
drop table t1;
|
||
create table t1 (a int not null primary key, b varchar(20) not null unique);
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO PRI NULL
|
||
b varchar(20) NO UNI NULL
|
||
drop table t1;
|
||
create table t1 (a int not null primary key, b int not null unique);
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO PRI NULL
|
||
b int(11) NO UNI NULL
|
||
drop table t1;
|
||
create table t1 (a int not null primary key, b varchar(20) not null, unique (b(10)));
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO PRI NULL
|
||
b varchar(20) NO UNI NULL
|
||
drop table t1;
|
||
create table t1 (a int not null primary key, b varchar(20) not null, c varchar(20) not null, unique(b(10),c(10)));
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO PRI NULL
|
||
b varchar(20) NO MUL NULL
|
||
c varchar(20) NO NULL
|
||
drop table t1;
|
||
create table t1 (
|
||
c1 int,
|
||
c2 char(12),
|
||
c3 varchar(123),
|
||
c4 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
index (c1),
|
||
index i1 (c1),
|
||
index i2 (c2),
|
||
index i3 (c3),
|
||
unique i4 (c4),
|
||
index i5 (c1, c2, c3, c4),
|
||
primary key (c2, c3),
|
||
index (c2, c4)) charset utf8mb4;
|
||
Warnings:
|
||
Warning 1831 Duplicate index 'i1' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`c1` int(11) DEFAULT NULL,
|
||
`c2` char(12) COLLATE utf8mb4_general_ci NOT NULL,
|
||
`c3` varchar(123) COLLATE utf8mb4_general_ci NOT NULL,
|
||
`c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`c2`,`c3`),
|
||
UNIQUE KEY `i4` (`c4`),
|
||
KEY `c1` (`c1`),
|
||
KEY `i1` (`c1`),
|
||
KEY `i2` (`c2`),
|
||
KEY `i3` (`c3`),
|
||
KEY `i5` (`c1`,`c2`,`c3`,`c4`),
|
||
KEY `c2` (`c2`,`c4`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
alter table t1 drop index c1;
|
||
alter table t1 add index (c1);
|
||
Warnings:
|
||
Warning 1831 Duplicate index 'c1' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
alter table t1 add index (c1);
|
||
Warnings:
|
||
Warning 1831 Duplicate index 'c1_2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
alter table t1 drop index i3;
|
||
alter table t1 add index i3 (c3);
|
||
alter table t1 drop index i2, drop index i4;
|
||
alter table t1 add index i2 (c2), add index i4 (c4);
|
||
alter table t1 drop index i2, drop index i4, add index i6 (c2, c4);
|
||
Warnings:
|
||
Warning 1831 Duplicate index 'i6' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
alter table t1 add index i2 (c2), add index i4 (c4), drop index i6;
|
||
alter table t1 drop index i2, drop index i4, add unique i4 (c4);
|
||
alter table t1 add index i2 (c2), drop index i4, add index i4 (c4);
|
||
alter table t1 drop index c2, add index (c2(4),c3(7));
|
||
alter table t1 drop index c2, add index (c2(4),c3(7));
|
||
alter table t1 add primary key (c1, c2), drop primary key;
|
||
alter table t1 drop primary key;
|
||
alter table t1 add primary key (c1, c2), drop primary key;
|
||
ERROR 42000: Can't DROP 'PRIMARY'; check that column/key exists
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`c1` int(11) NOT NULL,
|
||
`c2` char(12) COLLATE utf8mb4_general_ci NOT NULL,
|
||
`c3` varchar(123) COLLATE utf8mb4_general_ci NOT NULL,
|
||
`c4` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
KEY `i1` (`c1`),
|
||
KEY `i5` (`c1`,`c2`,`c3`,`c4`),
|
||
KEY `c1` (`c1`),
|
||
KEY `c1_2` (`c1`),
|
||
KEY `i3` (`c3`),
|
||
KEY `i2` (`c2`),
|
||
KEY `i4` (`c4`),
|
||
KEY `c2` (`c2`(4),`c3`(7))
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
insert into t1 values(1, 'a', 'a', NOW()), (1, 'b', 'b', NOW());
|
||
alter table t1 drop index i3, drop index i2, drop index i1;
|
||
alter table t1 add index i3 (c3), add index i2 (c2), add unique index i1 (c1);
|
||
ERROR 23000: Duplicate entry '1' for key 'i1'
|
||
drop table t1;
|
||
CREATE TABLE t1( a TINYINT, KEY(a) ) ENGINE=MyISAM;
|
||
INSERT INTO t1 VALUES( 1 );
|
||
ALTER TABLE t1 DISABLE KEYS;
|
||
EXPLAIN SELECT MAX(a) FROM t1 FORCE INDEX(a);
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL system NULL NULL NULL NULL 1 100.00 NULL
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select max('1') AS `MAX(a)` from dual
|
||
drop table t1;
|
||
CREATE TABLE t1 (
|
||
a INTEGER auto_increment PRIMARY KEY,
|
||
b INTEGER NOT NULL,
|
||
c INTEGER NOT NULL,
|
||
d CHAR(64)
|
||
);
|
||
CREATE TABLE t2 (
|
||
a INTEGER auto_increment PRIMARY KEY,
|
||
b INTEGER NOT NULL,
|
||
c SMALLINT NOT NULL,
|
||
d DATETIME NOT NULL,
|
||
e SMALLINT NOT NULL,
|
||
f INTEGER NOT NULL,
|
||
g INTEGER NOT NULL,
|
||
h SMALLINT NOT NULL,
|
||
i INTEGER NOT NULL,
|
||
j INTEGER NOT NULL,
|
||
UNIQUE INDEX (b),
|
||
INDEX (b, d, e, f, g, h, i, j, c),
|
||
INDEX (c)
|
||
);
|
||
INSERT INTO t2 VALUES
|
||
(NULL, 1, 254, '1000-01-01 00:00:00', 257, 0, 0, 0, 0, 0),
|
||
(NULL, 2, 1, '2004-11-30 12:00:00', 1, 0, 0, 0, 0, 0),
|
||
(NULL, 3, 1, '2004-11-30 12:00:00', 1, 0, 0, 2, -21600, 0),
|
||
(NULL, 4, 1, '2004-11-30 12:00:00', 1, 0, 0, 2, -10800, 0),
|
||
(NULL, 5, 1, '2004-11-30 12:00:00', 1, 0, 0, 5, -10800, 0),
|
||
(NULL, 6, 1, '2004-11-30 12:00:00', 102, 0, 0, 0, 0, 0),
|
||
(NULL, 7, 1, '2004-11-30 12:00:00', 105, 2, 0, 0, 0, 0),
|
||
(NULL, 8, 1, '2004-11-30 12:00:00', 105, 10, 0, 0, 0, 0);
|
||
INSERT INTO t1 (b, c, d) VALUES
|
||
(3388000, -553000, NULL),
|
||
(3388000, -553000, NULL);
|
||
DROP TABLE t1, t2;
|
||
create table t1(a int not null, key aa(a),
|
||
b char(10) not null, unique key bb(b(1)),
|
||
c char(4) not null, unique key cc(c)) charset utf8mb4;
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO MUL NULL
|
||
b char(10) NO UNI NULL
|
||
c char(4) NO PRI NULL
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL,
|
||
`b` char(10) COLLATE utf8mb4_general_ci NOT NULL,
|
||
`c` char(4) COLLATE utf8mb4_general_ci NOT NULL,
|
||
UNIQUE KEY `cc` (`c`),
|
||
UNIQUE KEY `bb` (`b`(1)),
|
||
KEY `aa` (`a`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
drop table t1;
|
||
create table t1(a int not null, key aa(a),
|
||
b char(10) not null, unique key bb(b(1)),
|
||
c char(4) not null) charset utf8mb4;
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO MUL NULL
|
||
b char(10) NO UNI NULL
|
||
c char(4) NO NULL
|
||
alter table t1 add unique key cc(c);
|
||
desc t1;
|
||
Field Type Null Key Default Extra
|
||
a int(11) NO MUL NULL
|
||
b char(10) NO UNI NULL
|
||
c char(4) NO PRI NULL
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL,
|
||
`b` char(10) COLLATE utf8mb4_general_ci NOT NULL,
|
||
`c` char(4) COLLATE utf8mb4_general_ci NOT NULL,
|
||
UNIQUE KEY `cc` (`c`),
|
||
UNIQUE KEY `bb` (`b`(1)),
|
||
KEY `aa` (`a`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
drop table t1;
|
||
End of 5.0 tests
|
||
DROP TABLE IF EXISTS t1;
|
||
CREATE TABLE t1 (a INT PRIMARY KEY AUTO_INCREMENT);
|
||
INSERT INTO t1 VALUES (), (), ();
|
||
SELECT 1 AS c1
|
||
FROM t1
|
||
ORDER BY (
|
||
SELECT 1 AS c2
|
||
FROM t1
|
||
GROUP BY GREATEST(LAST_INSERT_ID(), t1.a)
|
||
ORDER BY GREATEST(LAST_INSERT_ID(), t1.a)
|
||
LIMIT 1);
|
||
c1
|
||
1
|
||
1
|
||
1
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT, b INT, INDEX (a,b)) engine=myisam;
|
||
INSERT INTO t1 (a, b)
|
||
VALUES
|
||
(1,1), (1,2), (1,3), (1,4), (1,5),
|
||
(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6),
|
||
(5,1), (5,2), (5,3), (5,4), (5,5);
|
||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||
2 SUBQUERY t1 NULL range a a 5 NULL 11 100.00 Using index for group-by
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` `t1_outer` where false
|
||
SELECT 1 as RES FROM t1 AS t1_outer WHERE
|
||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
|
||
RES
|
||
DROP TABLE t1;
|
||
#
|
||
# Bug#18144: Cost with FORCE/USE index seems incorrect in some cases.
|
||
#
|
||
# We are interested in showing that the cost for the last plan is higher
|
||
# than for the preceding two plans.
|
||
#
|
||
CREATE TABLE t1( a INT, b INT, KEY( a ) ) engine=myisam;
|
||
INSERT INTO t1 values (1, 2), (1, 3), (2, 3), (2, 4), (3, 4), (3, 5);
|
||
EXPLAIN SELECT a, SUM( b ) FROM t1 GROUP BY a;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index a a 5 NULL 6 100.00 NULL
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,sum(`test`.`t1`.`b`) AS `SUM( b )` from `test`.`t1` group by `test`.`t1`.`a`
|
||
SHOW STATUS LIKE 'Last_query_cost';
|
||
Variable_name Value
|
||
Last_query_cost 1.102296
|
||
EXPLAIN SELECT a, SUM( b ) FROM t1 USE INDEX( a ) GROUP BY a;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index a a 5 NULL 6 100.00 NULL
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,sum(`test`.`t1`.`b`) AS `SUM( b )` from `test`.`t1` USE INDEX (`a`) group by `test`.`t1`.`a`
|
||
SHOW STATUS LIKE 'Last_query_cost';
|
||
Variable_name Value
|
||
Last_query_cost 1.102296
|
||
EXPLAIN SELECT a, SUM( b ) FROM t1 FORCE INDEX( a ) GROUP BY a;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index a a 5 NULL 6 100.00 NULL
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,sum(`test`.`t1`.`b`) AS `SUM( b )` from `test`.`t1` FORCE INDEX (`a`) group by `test`.`t1`.`a`
|
||
SHOW STATUS LIKE 'Last_query_cost';
|
||
Variable_name Value
|
||
Last_query_cost 2.349000
|
||
DROP TABLE t1;
|
||
#
|
||
# Additional coverage for handling of key algorithm in index definition.
|
||
#
|
||
#
|
||
# 1) Default case. If key algorithm was not specified explicitly and
|
||
# this is normal key (not spatial or fulltext) storage engine
|
||
# default key algorithm is used.
|
||
#
|
||
create table tm (k int, index (k)) charset utf8mb4 engine=myisam;
|
||
create table ti (k int, index (k)) charset utf8mb4 engine=XENGINE;
|
||
create table th (k int, index (k)) charset utf8mb4 engine=heap;
|
||
#
|
||
# Key algorithm is not shown in SHOW CREATE TABLE output in this case
|
||
#
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
show create table th;
|
||
Table Create Table
|
||
th CREATE TABLE `th` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
#
|
||
# But visible in I_S.STATISTICS
|
||
#
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
th HASH
|
||
ti SE_SPECIFIC
|
||
tm BTREE
|
||
#
|
||
# Same applies when keys are added by ALTER TABLE
|
||
#
|
||
alter table tm add column l int, add index (l);
|
||
alter table ti add column l int, add index (l);
|
||
alter table th add column l int, add index (l);
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`),
|
||
KEY `l` (`l`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`),
|
||
KEY `l` (`l`)
|
||
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
show create table th;
|
||
Table Create Table
|
||
th CREATE TABLE `th` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`),
|
||
KEY `l` (`l`)
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'l'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
th HASH
|
||
ti SE_SPECIFIC
|
||
tm BTREE
|
||
drop tables tm, ti, th;
|
||
#
|
||
# 2) For SPATIAL and FULLTEXT keys we always use special key
|
||
# algorithms and there is no way to specify it explicitly.
|
||
#
|
||
create table tm (pk int primary key, p point not null SRID 0, spatial index (p))
|
||
charset utf8mb4 engine=myisam;
|
||
create table ti (pk int primary key, p point not null SRID 0, spatial index (p))
|
||
charset utf8mb4 engine=innodb;
|
||
create table th (pk int primary key, p point not null, spatial index (p))
|
||
charset utf8mb4 engine=heap;
|
||
ERROR 42000: The storage engine for the table doesn't support GEOMETRY
|
||
#
|
||
# Key algorithm is not shown in SHOW CREATE TABLE output in this
|
||
# case as well.
|
||
#
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`pk` int(11) NOT NULL,
|
||
`p` point NOT NULL /*!80003 SRID 0 */,
|
||
PRIMARY KEY (`pk`),
|
||
SPATIAL KEY `p` (`p`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`pk` int(11) NOT NULL,
|
||
`p` point NOT NULL /*!80003 SRID 0 */,
|
||
PRIMARY KEY (`pk`),
|
||
SPATIAL KEY `p` (`p`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
#
|
||
# But visible in I_S.STATISTICS
|
||
#
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'p'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
ti SPATIAL
|
||
tm SPATIAL
|
||
#
|
||
# Same applies when keys are added by ALTER TABLE
|
||
#
|
||
alter table tm add column q point not null SRID 0, add spatial index (q);
|
||
alter table ti add column q point not null SRID 0, add spatial index (q);
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`pk` int(11) NOT NULL,
|
||
`p` point NOT NULL /*!80003 SRID 0 */,
|
||
`q` point NOT NULL /*!80003 SRID 0 */,
|
||
PRIMARY KEY (`pk`),
|
||
SPATIAL KEY `p` (`p`),
|
||
SPATIAL KEY `q` (`q`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`pk` int(11) NOT NULL,
|
||
`p` point NOT NULL /*!80003 SRID 0 */,
|
||
`q` point NOT NULL /*!80003 SRID 0 */,
|
||
PRIMARY KEY (`pk`),
|
||
SPATIAL KEY `p` (`p`),
|
||
SPATIAL KEY `q` (`q`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'q'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
ti SPATIAL
|
||
tm SPATIAL
|
||
drop tables tm, ti;
|
||
#
|
||
# Same applies to FULLTEXT indexes.
|
||
#
|
||
create table tm (pk int primary key, v varchar(255), fulltext index (v))
|
||
charset utf8mb4 engine=myisam;
|
||
create table ti (pk int primary key, v varchar(255), fulltext index (v))
|
||
charset utf8mb4 engine=innodb;
|
||
create table th (pk int primary key, v varchar(255), fulltext index (v))
|
||
charset utf8mb4 engine=heap;
|
||
ERROR HY000: The used table type doesn't support FULLTEXT indexes
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`pk` int(11) NOT NULL,
|
||
`v` varchar(255) DEFAULT NULL,
|
||
PRIMARY KEY (`pk`),
|
||
FULLTEXT KEY `v` (`v`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`pk` int(11) NOT NULL,
|
||
`v` varchar(255) DEFAULT NULL,
|
||
PRIMARY KEY (`pk`),
|
||
FULLTEXT KEY `v` (`v`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'v'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
ti FULLTEXT
|
||
tm FULLTEXT
|
||
#
|
||
# Same applies when keys are added by ALTER TABLE
|
||
#
|
||
alter table tm add column w varchar(255), add fulltext index (w);
|
||
alter table ti add column w varchar(255), add fulltext index (w);
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`pk` int(11) NOT NULL,
|
||
`v` varchar(255) DEFAULT NULL,
|
||
`w` varchar(255) DEFAULT NULL,
|
||
PRIMARY KEY (`pk`),
|
||
FULLTEXT KEY `v` (`v`),
|
||
FULLTEXT KEY `w` (`w`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`pk` int(11) NOT NULL,
|
||
`v` varchar(255) DEFAULT NULL,
|
||
`w` varchar(255) DEFAULT NULL,
|
||
PRIMARY KEY (`pk`),
|
||
FULLTEXT KEY `v` (`v`),
|
||
FULLTEXT KEY `w` (`w`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'w'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
ti FULLTEXT
|
||
tm FULLTEXT
|
||
drop tables tm, ti;
|
||
#
|
||
# 3) If key algorithm was specified explicitly and it is supported
|
||
# by the storage engine it will be used.
|
||
#
|
||
create table tm (k int, index using btree (k)) charset utf8mb4 engine=myisam;
|
||
create table ti (k int, index using btree (k)) charset utf8mb4 engine=innodb;
|
||
create table th (k int, index using btree (k)) charset utf8mb4 engine=heap;
|
||
#
|
||
# In this case it is shown in SHOW CREATE TABLE output
|
||
#
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table th;
|
||
Table Create Table
|
||
th CREATE TABLE `th` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
#
|
||
# Also visible in I_S.STATISTICS
|
||
#
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
th BTREE
|
||
ti BTREE
|
||
tm BTREE
|
||
#
|
||
# Same applies when keys are added by ALTER TABLE
|
||
#
|
||
# Note that the information that algorithm was provided explicitly is
|
||
# preserved by ALTER TABLE.
|
||
alter table tm add column l int, add index using btree (l);
|
||
alter table ti add column l int, add index using btree (l);
|
||
alter table th add column l int, add index using hash (l);
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE,
|
||
KEY `l` (`l`) USING BTREE
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE,
|
||
KEY `l` (`l`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table th;
|
||
Table Create Table
|
||
th CREATE TABLE `th` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE,
|
||
KEY `l` (`l`) USING HASH
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'l'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
th HASH
|
||
ti BTREE
|
||
tm BTREE
|
||
drop tables tm, ti, th;
|
||
#
|
||
# 4) If key algorithm was specified explicitly and but it is not
|
||
# supported by the storage engine the default algorithm for SE
|
||
# will be used instead. We will emit a note in this case. We will
|
||
# also treat such situation as if algorithm is implicit.
|
||
#
|
||
# The below statements should emit notes.
|
||
create table tm (k int, index using hash (k)) charset utf8mb4 engine=myisam;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
create table ti (k int, index using hash (k)) charset utf8mb4 engine=innodb;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
#
|
||
# In this case algorithm is not in SHOW CREATE TABLE output
|
||
#
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
#
|
||
# But visible in I_S.STATISTICS
|
||
#
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
ti BTREE
|
||
tm BTREE
|
||
#
|
||
# Same applies when keys are added by ALTER TABLE
|
||
#
|
||
alter table tm add column l int, add index using hash (l);
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
alter table ti add column l int, add index using hash (l);
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
show create table tm;
|
||
Table Create Table
|
||
tm CREATE TABLE `tm` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`),
|
||
KEY `l` (`l`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
show create table ti;
|
||
Table Create Table
|
||
ti CREATE TABLE `ti` (
|
||
`k` int(11) DEFAULT NULL,
|
||
`l` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`),
|
||
KEY `l` (`l`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'l'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
ti BTREE
|
||
tm BTREE
|
||
drop tables tm, ti;
|
||
#
|
||
# 5) Coverage for key algorithm handling in cross-engine ALTER TABLE.
|
||
#
|
||
# If algorithm was not specified explicitly cross-engine ALTER TABLE
|
||
# will silently change it to the new SE's default.
|
||
create table t1 (k int, index (k)) charset utf8mb4 engine=innodb;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'k'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
t1 BTREE
|
||
# Change table's SE.
|
||
alter table t1 engine= heap;
|
||
# Key definition stays the same in SHOW CREATE TABLE output
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
# But in I_S.STATISTICS we see that algorithm has changed.
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'k'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
t1 HASH
|
||
drop table t1;
|
||
#
|
||
# If algorithm was specified explicitly and is supported by the new
|
||
# SE we will keep it.
|
||
#
|
||
create table t1 (k int, index using btree (k)) charset utf8mb4 engine=innodb;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'k'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
t1 BTREE
|
||
# Change table's SE.
|
||
alter table t1 engine= heap;
|
||
# Key definition stays the same in SHOW CREATE TABLE output
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
# In I_S.STATISTICS we also see that algorithm is the same
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'k'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
t1 BTREE
|
||
drop table t1;
|
||
#
|
||
# If algorithm was specified explicitly but is not supported by the
|
||
# new SE, we will used new SE's default instead, emit a note, and
|
||
# treat new algorithm as implicitly specified after that.
|
||
#
|
||
create table t1 (k int, index using hash (k)) charset utf8mb4 engine=heap;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING HASH
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'k'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
t1 HASH
|
||
# Change table's SE. Note will be emitted.
|
||
alter table t1 engine= innodb;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
# New algorithm is not visible SHOW CREATE TABLE output.
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
# In I_S.STATISTICS we see that algorithm has changed.
|
||
select table_name, index_type from information_schema.statistics
|
||
where table_schema = 'test' and table_name like 't%' and index_name = 'k'
|
||
order by table_name;
|
||
TABLE_NAME INDEX_TYPE
|
||
t1 BTREE
|
||
drop table t1;
|
||
#
|
||
# 6) Key algorithms and duplicate key detection.
|
||
#
|
||
# When we detect duplicate keys in table definition we take
|
||
# key algorithm into account. But we ignore if it was explicit
|
||
# or implicit.
|
||
create table t1 (k int, index using btree (k), index using hash (k)) engine=heap;
|
||
drop table t1;
|
||
create table t1 (k int, index (k), index using hash (k)) engine=heap;
|
||
Warnings:
|
||
Warning 1831 Duplicate index 'k_2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
drop table t1;
|
||
create table t1 (k int, index using btree (k), index (k)) engine=innodb;
|
||
Warnings:
|
||
Warning 1831 Duplicate index 'k_2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
drop table t1;
|
||
create table t1 (k int, index using btree (k), index using hash (k)) engine=innodb;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
Warning 1831 Duplicate index 'k_2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
drop table t1;
|
||
#
|
||
# 7) Key algorithm and ALTER TABLE ALGORITHM=INPLACE
|
||
#
|
||
# Changing key algorithm from one used by default to the same one
|
||
# but specified explicitly should be inplace/fast operation.
|
||
create table t1 (k int, index (k)) charset utf8mb4 engine=myisam;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
alter table t1 drop key k, add index using btree (k), algorithm=inplace;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
alter table t1 drop key k, add index (k), algorithm=inplace;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
# Note that below statement doesn't really change algorithm.
|
||
alter table t1 drop key k, add index using hash (k), algorithm=inplace;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
drop table t1;
|
||
# Changing key algorithm to another one can require COPY algorithm.
|
||
create table t1 (k int, index (k)) charset utf8mb4 engine=heap;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
alter table t1 drop key k, add index using btree (k), algorithm=inplace;
|
||
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`)
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
alter table t1 drop key k, add index using btree (k), algorithm=copy;
|
||
show create table t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`k` int(11) DEFAULT NULL,
|
||
KEY `k` (`k`) USING BTREE
|
||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
drop table t1;
|
||
#
|
||
# Bug #27546306 MISSING VITAL ERROR INFORMATION IN ERROR MESSAGE WHEN FAILING TO CONVERT CHARSET
|
||
#
|
||
#
|
||
CREATE TABLE `mytable` ( `id` INT(10) UNSIGNED NOT NULL DEFAULT '0', `somefield` VARCHAR(1000) NOT NULL DEFAULT '',
|
||
PRIMARY KEY (`id`,`somefield`) )
|
||
DEFAULT CHARSET=UTF8MB3;
|
||
Warnings:
|
||
Warning 1681 Integer display width is deprecated and will be removed in a future release.
|
||
Warning 1287 'utf8mb3' is deprecated and will be removed in a future release. Please use utf8mb4 instead
|
||
ALTER TABLE mytable CONVERT TO CHARACTER SET UTF8MB4;
|
||
ERROR HY000: Could not change column 'somefield' of table 'mytable'. The resulting size of index 'PRIMARY' would exceed the max key length of 3072 bytes.
|
||
DROP TABLE mytable;
|
||
#
|
||
# Bug 25647413 "ASSERTION FAILURE: HA_INNODB.CC:NNN:(TABLE->INDEXES).
|
||
# COUNT == DD_TABLE.INDEXES()".
|
||
#
|
||
create table t1 (b text not null, unique key(b(8)));
|
||
drop table t1;
|