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:
47
mysql-test/suite/innodb/r/innodb_force_pk.result
Normal file
47
mysql-test/suite/innodb/r/innodb_force_pk.result
Normal 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;
|
1
mysql-test/suite/innodb/t/innodb_force_pk.opt
Normal file
1
mysql-test/suite/innodb/t/innodb_force_pk.opt
Normal file
@ -0,0 +1 @@
|
||||
--innodb_force_primary_key=1
|
34
mysql-test/suite/innodb/t/innodb_force_pk.test
Normal file
34
mysql-test/suite/innodb/t/innodb_force_pk.test
Normal 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
|
Reference in New Issue
Block a user