mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-24 07:13:33 +03:00 
			
		
		
		
	mysql-test/r/key.result: Fixed result after removing wrong bug fix mysql-test/t/key.test: Added SHOW CREATE TABLE, which is the proper way to check for table definitions sql/table.cc: Reverted wrong bug fix. The intention with the original code was to show that MySQL treats the first given unique key as a primary key. Clients can use the marked primary key as a real primary key to validate row changes in case of conflicting updates. The ODBC driver (and other drivers) may also use this fact to optimize/check updates and handle conflicts. The marked key also shows what some engines, like InnoDB or NDB, will use as it's internal primary key. For checking if someone has declared a true PRIMARY KEY, one should use 'SHOW CREATE TABLE'
		
			
				
	
	
		
			362 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			362 lines
		
	
	
		
			12 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)
 | ||
| );
 | ||
| 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 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)
 | ||
| );
 | ||
| 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
 | ||
| drop table t1,t2;
 | ||
| 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 1
 | ||
| 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;
 | ||
| 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);
 | ||
| show keys from t1;
 | ||
| Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment
 | ||
| t1	0	PRIMARY	1	d	A	0	NULL	NULL		BTREE	
 | ||
| t1	0	a	1	a	A	0	NULL	NULL		BTREE	
 | ||
| t1	0	e	1	e	A	0	NULL	NULL		BTREE	
 | ||
| t1	0	b	1	b	A	NULL	NULL	NULL	YES	BTREE	
 | ||
| t1	1	c	1	c	A	NULL	NULL	NULL	YES	BTREE	
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (c CHAR(10) NOT NULL,i INT NOT NULL AUTO_INCREMENT,
 | ||
| UNIQUE (c,i));
 | ||
| INSERT INTO t1 (c) VALUES (NULL),(NULL);
 | ||
| Warnings:
 | ||
| Warning	1263	Data truncated; NULL supplied to NOT NULL column 'c' at row 1
 | ||
| Warning	1263	Data truncated; NULL supplied to NOT NULL column 'c' at row 2
 | ||
| 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));
 | ||
| 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;
 | ||
| insert t1 values (1, repeat('a',210), repeat('b', 310));
 | ||
| Warnings:
 | ||
| Warning	1265	Data truncated for column 'a' at row 1
 | ||
| insert 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
 | ||
| select i from t1 where a=repeat(_utf8 0xD0B1,200);
 | ||
| i
 | ||
| 2
 | ||
| select i from t1 where b=repeat(_utf8 'b',310);
 | ||
| i
 | ||
| 1
 | ||
| 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	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	const	PRIMARY	PRIMARY	4	const	1	Using index
 | ||
| explain select 1 from t1 where id =2 or id=3;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	range	PRIMARY	PRIMARY	4	NULL	2	Using where; Using index
 | ||
| explain select name from t1 where id =2;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	const	PRIMARY	PRIMARY	4	const	1	
 | ||
| ALTER TABLE t1 DROP PRIMARY KEY, ADD INDEX (id);
 | ||
| explain select 1 from t1 where id =2;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ref	id	id	4	const	1	Using where; Using index
 | ||
| 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));
 | ||
| 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	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	const	numreponse	numreponse	4	const	1	Using index
 | ||
| FLUSH TABLES;
 | ||
| SELECT numeropost FROM t1 WHERE numreponse='1';
 | ||
| numeropost
 | ||
| 1
 | ||
| drop table t1;
 | ||
| create table t1 (c varchar(30) character set utf8, t text character set utf8, unique (c(2)), unique (t(3))) engine=myisam;
 | ||
| show create table t1;
 | ||
| Table	Create Table
 | ||
| t1	CREATE TABLE `t1` (
 | ||
|   `c` varchar(30) character set utf8 default NULL,
 | ||
|   `t` text character set utf8,
 | ||
|   UNIQUE KEY `c` (`c`(2)),
 | ||
|   UNIQUE KEY `t` (`t`(3))
 | ||
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | ||
| insert t1 values ('cccc', 'tttt'),
 | ||
| (0xD0B1212223D0B1D0B1D0B1D0B1D0B1, 0xD0B1D0B1212223D0B1D0B1D0B1D0B1),
 | ||
| (0xD0B1222123D0B1D0B1D0B1D0B1D0B1, 0xD0B1D0B1222123D0B1D0B1D0B1D0B1);
 | ||
| insert t1 (c) values ('cc22');
 | ||
| ERROR 23000: Duplicate entry 'cc22' for key 1
 | ||
| insert t1 (t) values ('ttt22');
 | ||
| ERROR 23000: Duplicate entry 'ttt22' for key 2
 | ||
| insert t1 (c) values (0xD0B1212322D0B1D0B1D0B1D0B1D0B1);
 | ||
| ERROR 23000: Duplicate entry 'б!#"<22>' for key 1
 | ||
| insert t1 (t) values (0xD0B1D0B1212322D0B1D0B1D0B1D0B1);
 | ||
| ERROR 23000: Duplicate entry 'бб!#"б' for key 2
 | ||
| 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 '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));
 | ||
| desc t1;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| i1	int(11)		PRI	0	
 | ||
| i2	int(11)		UNI	0	
 | ||
| show create table t1;
 | ||
| Table	Create Table
 | ||
| t1	CREATE TABLE `t1` (
 | ||
|   `i1` int(11) NOT NULL default '0',
 | ||
|   `i2` int(11) NOT NULL default '0',
 | ||
|   UNIQUE KEY `i1idx` (`i1`),
 | ||
|   UNIQUE KEY `i2idx` (`i2`)
 | ||
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | ||
| 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
 |