1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-5335: Force PK option. Added a new dynamic configuration variable

innodb_force_primary_key default off. If option is true, create table without 
primary key or unique key where all keyparts are NOT NULL is not
accepted. Instead an error message is printed. Variable value can
be changed with set global innodb_force_primary_key = <value>.
This commit is contained in:
Jan Lindström
2014-03-11 13:40:29 +02:00
parent fc86a1f4af
commit 4e02c2fe56
11 changed files with 229 additions and 6 deletions

View File

@ -0,0 +1,47 @@
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 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;

View File

@ -0,0 +1 @@
--innodb_force_primary_key=1

View File

@ -0,0 +1,34 @@
-- source include/have_innodb.inc
let $force_pk=`select @@innodb_force_primary_key`;
-- error 1173
CREATE TABLE T1(A INTEGER) ENGINE=INNODB;
SHOW WARNINGS;
-- error 1173
CREATE TABLE T1(A INTEGER UNIQUE KEY) ENGINE=INNODB;
SHOW WARNINGS;
CREATE TABLE T1(A INTEGER NOT NULL PRIMARY KEY) ENGINE=INNODB;
SHOW CREATE TABLE T1;
SHOW WARNINGS;
DROP TABLE T1;
CREATE TABLE T1(A INTEGER NOT NULL UNIQUE KEY) ENGINE=INNODB;
SHOW CREATE TABLE T1;
SHOW WARNINGS;
DROP TABLE T1;
set global innodb_force_primary_key = 0;
CREATE TABLE T1(A INTEGER) ENGINE=INNODB;
SHOW WARNINGS;
INSERT INTO T1 VALUES (1),(2),(3);
set global innodb_force_primary_key = 1;
SELECT * FROM T1;
-- error 1173
CREATE TABLE T2(A INTEGER) ENGINE=INNODB;
SHOW WARNINGS;
DROP TABLE T1;
--disable_query_log
eval set global innodb_force_primary_key=$force_pk;
--enable_query_log