699 lines
24 KiB
Plaintext
699 lines
24 KiB
Plaintext
### test creating index with data contains null field
|
|
set @save_sql_mode=@@sql_mode;
|
|
==========================================================
|
|
# case 1 with hidden primary key
|
|
==========================================================
|
|
# case 1.1 on INT column
|
|
==========================================================
|
|
CREATE TABLE t1(id INT, a INT);
|
|
INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 1
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a INT);
|
|
INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 1
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a INT);
|
|
INSERT INTO t1 VALUES(1, 1), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 1
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 1.2 on CHAR COLUMN
|
|
==========================================================
|
|
CREATE TABLE t1(id INT, a CHAR(10));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a CHAR(10));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a CHAR(10));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 1.3 on VARCHAR COLUMN
|
|
==========================================================
|
|
CREATE TABLE t1(id INT, a VARCHAR(60));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a VARCHAR(60));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a VARCHAR(60));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 1.4 on TEXT COLUMN
|
|
==========================================================
|
|
CREATE TABLE t1(id INT, a TEXT);
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a(10));
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` text COLLATE utf8mb4_general_ci,
|
|
UNIQUE KEY `a_2` (`a`(4)),
|
|
KEY `a` (`a`(2))
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a TEXT);
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a(10));
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` text COLLATE utf8mb4_general_ci,
|
|
UNIQUE KEY `a_2` (`a`(4)),
|
|
KEY `a` (`a`(2))
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT, a TEXT);
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 ADD PRIMARY KEY(a(10));
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) DEFAULT NULL,
|
|
`a` text COLLATE utf8mb4_general_ci,
|
|
UNIQUE KEY `a_2` (`a`(4)),
|
|
KEY `a` (`a`(2))
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 2 with primary key
|
|
==========================================================
|
|
# case 2.1 on INT column
|
|
==========================================================
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a INT);
|
|
INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 1
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 23000: Duplicate entry '0' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a INT);
|
|
INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 1
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a INT);
|
|
INSERT INTO t1 VALUES(1, 1), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 1
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` int(11) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 2.2 on CHAR column
|
|
==========================================================
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a CHAR(10));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a CHAR(10));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a CHAR(10));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 2.3 on VARCHAR column
|
|
==========================================================
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a VARCHAR(60));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a VARCHAR(60));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a VARCHAR(60));
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a);
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`),
|
|
KEY `a` (`a`)
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
==========================================================
|
|
# case 2.4 on TEXT column
|
|
==========================================================
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a TEXT);
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE;
|
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY.
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10));
|
|
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` text COLLATE utf8mb4_general_ci,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`(4)),
|
|
KEY `a` (`a`(2))
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a TEXT);
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
3 NULL
|
|
ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10));
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` text COLLATE utf8mb4_general_ci,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`(4)),
|
|
KEY `a` (`a`(2))
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|
|
set sql_mode="STRICT_ALL_TABLES";
|
|
Warnings:
|
|
Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
|
|
CREATE TABLE t1(id INT PRIMARY KEY, a TEXT);
|
|
INSERT INTO t1 VALUES(1, 'a'), (2, NULL);
|
|
SELECT * FROM t1;
|
|
id a
|
|
1 a
|
|
2 NULL
|
|
ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE;
|
|
ERROR 22004: Invalid use of NULL value
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10));
|
|
ERROR 22004: Invalid use of NULL value
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL,
|
|
`a` text COLLATE utf8mb4_general_ci,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `a_2` (`a`(4)),
|
|
KEY `a` (`a`(2))
|
|
) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
set sql_mode = @save_sql_mode;
|