mirror of
https://github.com/MariaDB/server.git
synced 2025-01-28 01:34:17 +01:00
3307eaab68
Analysis: Handler table flag HA_REQUIRE_PRIMARY_KEY alone is not enough to force primary or unique key, if table has at least one NOT NULL column and secondary key for that column. Fix: Add additional check that table really has primary key or unique key for InnoDB terms.
65 lines
1.8 KiB
Text
65 lines
1.8 KiB
Text
create table t1(a integer) engine=innodb;
|
|
ERROR 42000: This table type requires a primary key
|
|
show warnings;
|
|
Level Code Message
|
|
Error 1173 This table type requires a primary key
|
|
create table t1(a integer unique key) engine=innodb;
|
|
ERROR 42000: This table type requires a primary key
|
|
show warnings;
|
|
Level Code Message
|
|
Error 1173 This table type requires a primary key
|
|
create table t1(a integer not null, b integer,
|
|
unique key(a,b)) engine=innodb;
|
|
ERROR 42000: This table type requires a primary key
|
|
show warnings;
|
|
Level Code Message
|
|
Error 1173 This table type requires a primary key
|
|
create table t1(a integer not null primary key) engine=innodb;
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
show warnings;
|
|
Level Code Message
|
|
drop table t1;
|
|
create table t1(a integer not null unique key) engine=innodb;
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL,
|
|
UNIQUE KEY `a` (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
show warnings;
|
|
Level Code Message
|
|
drop table t1;
|
|
set global innodb_force_primary_key = 0;
|
|
create table t1(a integer) engine=innodb;
|
|
show warnings;
|
|
Level Code Message
|
|
insert into t1 values (1),(2),(3);
|
|
set global innodb_force_primary_key = 1;
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
create table t2(a integer) engine=innodb;
|
|
ERROR 42000: This table type requires a primary key
|
|
show warnings;
|
|
Level Code Message
|
|
Error 1173 This table type requires a primary key
|
|
drop table t1;
|
|
create table t1 (i int not null, key(i)) engine=innodb;
|
|
ERROR 42000: This table type requires a primary key
|
|
create table t1 (i int not null, unique key(i)) engine=innodb;
|
|
show warnings;
|
|
Level Code Message
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`i` int(11) NOT NULL,
|
|
UNIQUE KEY `i` (`i`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
drop table t1;
|