6253 lines
202 KiB
Plaintext
6253 lines
202 KiB
Plaintext
##############################################
|
||
# Test instant ADD COLUMN for REDUNDANT format
|
||
##############################################
|
||
#
|
||
# Scenario 1:
|
||
# Create a small table, and add all kinds of new columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 INT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 1;
|
||
c1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN c2 INT NOT NULL DEFAULT 10;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c2' AND has_default = 1;
|
||
name default_value
|
||
c2 8000000a
|
||
INSERT INTO t1(a, c2) VALUES(0, 11);
|
||
SELECT count(*) = max(a) FROM t1 WHERE c2 = 10;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c2 FROM t1 WHERE c2 = 11;
|
||
c2
|
||
11
|
||
ALTER TABLE t1 ADD COLUMN d1 BIGINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd1' AND has_default = 1;
|
||
name default_value
|
||
d1 NULL
|
||
INSERT INTO t1(a, d1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE d1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT d1 FROM t1 WHERE d1 = 1;
|
||
d1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN d2 BIGINT NOT NULL DEFAULT 1234567890;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd2' AND has_default = 1;
|
||
name default_value
|
||
d2 80000000499602d2
|
||
INSERT INTO t1(a, d2) VALUES(0, 1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE d2 = 1234567890;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT d2 FROM t1 WHERE d2 = 1234;
|
||
d2
|
||
1234
|
||
ALTER TABLE t1 ADD COLUMN e1 SMALLINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e1' AND has_default = 1;
|
||
name default_value
|
||
e1 NULL
|
||
INSERT INTO t1(a, e1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE e1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT e1 FROM t1 WHERE e1 = 1;
|
||
e1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN e2 SMALLINT NOT NULL DEFAULT 10;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e2' AND has_default = 1;
|
||
name default_value
|
||
e2 800a
|
||
INSERT INTO t1(a, e2) VALUES(0, 11);
|
||
SELECT count(*) = max(a) FROM t1 WHERE e2 = 10;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT e2 FROM t1 WHERE e2 = 11;
|
||
e2
|
||
11
|
||
ALTER TABLE t1 ADD COLUMN f1 TINYINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f1' AND has_default = 1;
|
||
name default_value
|
||
f1 NULL
|
||
INSERT INTO t1(a, f1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE f1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT f1 FROM t1 WHERE f1 = 1;
|
||
f1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN f2 TINYINT NOT NULL DEFAULT 123;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f2' AND has_default = 1;
|
||
name default_value
|
||
f2 fb
|
||
INSERT INTO t1(a, f2) VALUES(0, 12);
|
||
SELECT count(*) = max(a) FROM t1 WHERE f2 = 123;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT f2 FROM t1 WHERE f2 = 12;
|
||
f2
|
||
12
|
||
ALTER TABLE t1 ADD COLUMN g1 MEDIUMINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g1' AND has_default = 1;
|
||
name default_value
|
||
g1 NULL
|
||
INSERT INTO t1(a, g1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE g1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT g1 FROM t1 WHERE g1 = 1;
|
||
g1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN g2 MEDIUMINT NOT NULL DEFAULT 12345;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g2' AND has_default = 1;
|
||
name default_value
|
||
g2 803039
|
||
INSERT INTO t1(a, g2) VALUES(0, 1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE g2 = 12345;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT g2 FROM t1 WHERE g2 = 1234;
|
||
g2
|
||
1234
|
||
ALTER TABLE t1 ADD COLUMN h1 FLOAT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h1' AND has_default = 1;
|
||
name default_value
|
||
h1 NULL
|
||
INSERT INTO t1(a, h1) VALUES(0, 1.0);
|
||
SELECT count(*) = max(a) FROM t1 WHERE h1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT h1 FROM t1 WHERE h1 = 1;
|
||
h1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN h2 FLOAT NOT NULL DEFAULT 12.34;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h2' AND has_default = 1;
|
||
name default_value
|
||
h2 a4704541
|
||
INSERT INTO t1(a, h2) VALUES(0, 1.234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE h2 = 12.34;
|
||
count(*) = max(a)
|
||
NULL
|
||
SELECT h2 FROM t1 WHERE h2 = 1.234;
|
||
h2
|
||
ALTER TABLE t1 ADD COLUMN i1 DECIMAL(5, 2), ADD COLUMN i2 double, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'i1' OR name = 'i2') AND has_default = 1;
|
||
name default_value
|
||
i1 NULL
|
||
i2 NULL
|
||
INSERT INTO t1(a, i1, i2) VALUES(0, 10.10, 20.20);
|
||
SELECT count(*) = max(a) FROM t1 WHERE i1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE i2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT i1 FROM t1 WHERE i1 = 10.10;
|
||
i1
|
||
10.10
|
||
SELECT i2 FROM t1 WHERE i2 = 20.20;
|
||
i2
|
||
20.2
|
||
ALTER TABLE t1 ADD COLUMN j1 DECIMAL(5, 2) NOT NULL DEFAULT 100.00, ADD COLUMN j2 double NOT NULL DEFAULT 1000.5678;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'j1' OR name = 'j2') AND has_default = 1;
|
||
name default_value
|
||
j1 806400
|
||
j2 5af5b9da8a448f40
|
||
INSERT INTO t1(a, j1, j2) VALUES(0, 90.90, 1000.1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE j1 = 100.00;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE j2 = 1000.5678;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT j1 FROM t1 WHERE j1 = 90.90;
|
||
j1
|
||
90.90
|
||
SELECT j2 FROM t1 WHERE j2 = 1000.1234;
|
||
j2
|
||
1000.1234
|
||
ALTER TABLE t1 ADD COLUMN k1 BIT(8), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'k1' AND has_default = 1;
|
||
name default_value
|
||
k1 NULL
|
||
INSERT INTO t1(a, k1) VALUES(0, b'010101');
|
||
SELECT count(*) = max(a) FROM t1 WHERE k1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(k1) FROM t1 WHERE k1 = b'010101';
|
||
hex(k1)
|
||
15
|
||
ALTER TABLE t1 ADD COLUMN k2 BIT(8) NOT NULL DEFAULT b'101010';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'k2' AND has_default = 1;
|
||
name default_value
|
||
k2 2a
|
||
INSERT INTO t1(a, k2) VALUES(0, b'110011');
|
||
SELECT count(*) = max(a) FROM t1 WHERE k2 = b'101010';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(k2) FROM t1 WHERE k2 = b'110011';
|
||
hex(k2)
|
||
33
|
||
ALTER TABLE t1 ADD COLUMN l1 CHAR(50), ADD COLUMN l2 VARCHAR(100), ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'l1' OR name = 'l2') AND has_default = 1;
|
||
name default_value
|
||
l1 NULL
|
||
l2 NULL
|
||
INSERT INTO t1(a, l1, l2) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn ');
|
||
SELECT count(*) = max(a) FROM t1 WHERE l2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE l1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT l1 FROM t1 WHERE l1 = 'ABCD EFGH';
|
||
l1
|
||
ABCD EFGH
|
||
SELECT l2 FROM t1 WHERE l2 = 'abcdefg hijklmn ';
|
||
l2
|
||
abcdefg hijklmn
|
||
ALTER TABLE t1 ADD COLUMN m1 CHAR(50) default 'The fox jumps over', ADD COLUMN m2 VARCHAR(50) DEFAULT 'The fox jumps over the lazy dog.';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'm1' OR name = 'm2') AND has_default = 1;
|
||
name default_value
|
||
m1 54686520666f78206a756d7073206f7665722020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
|
||
m2 54686520666f78206a756d7073206f76657220746865206c617a7920646f672e
|
||
INSERT INTO t1(a, m1, m2) VALUES(0, 'over the lazy dog', 'The lazy dog jumps over the fox.');
|
||
SELECT count(*) = max(a) FROM t1 WHERE m1 = 'The fox jumps over';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE m2 like 'The fox jumps%';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT m1 FROM t1 WHERE m1 = 'over the lazy dog';
|
||
m1
|
||
over the lazy dog
|
||
SELECT m2 FROM t1 WHERE m2 like '%the fox.';
|
||
m2
|
||
The lazy dog jumps over the fox.
|
||
ALTER TABLE t1 ADD COLUMN n1 BINARY(10), ADD COLUMN n2 VARBINARY(10), ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'n1' OR name = 'n2') AND has_default = 1;
|
||
name default_value
|
||
n1 NULL
|
||
n2 NULL
|
||
INSERT INTO t1(a, n1, n2) VALUES(0, 0x010203040506070809, 0x102030405060708090);
|
||
SELECT count(*) = max(a) FROM t1 WHERE n1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE n2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(n1) FROM t1 WHERE n1 = 0x01020304050607080900;
|
||
hex(n1)
|
||
01020304050607080900
|
||
SELECT hex(n2) FROM t1 WHERE n2 = 0x102030405060708090;
|
||
hex(n2)
|
||
102030405060708090
|
||
ALTER TABLE t1 ADD COLUMN o1 BINARY(10) DEFAULT 0x11223344, ADD COLUMN o2 VARBINARY(10) DEFAULT 0x55667788;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'o1' OR name = 'o2') AND has_default = 1;
|
||
name default_value
|
||
o1 11223344000000000000
|
||
o2 55667788
|
||
INSERT INTO t1(a, o1, o2) VALUES(0, 0x44332211, 0x88776655);
|
||
SELECT count(*) = max(a) FROM t1 WHERE o1 = 0x11223344000000000000;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE o2 = 0x55667788;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(o1) FROM t1 WHERE o1 = 0x44332211000000000000;
|
||
hex(o1)
|
||
44332211000000000000
|
||
SELECT hex(o2) FROM t1 WHERE o2 = 0x88776655;
|
||
hex(o2)
|
||
88776655
|
||
ALTER TABLE t1 ADD COLUMN p1 DATETIME, ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'p1' AND has_default = 1;
|
||
name default_value
|
||
p1 NULL
|
||
INSERT INTO t1(a, p1) VALUES(0, '2017-12-31 00:00:00');
|
||
SELECT count(*) = max(a) FROM t1 WHERE p1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT p1 FROM t1 WHERE p1 = '2017-12-31 00:00:00';
|
||
p1
|
||
2017-12-31 00:00:00
|
||
ALTER TABLE t1 ADD COLUMN p2 DATETIME NOT NULL DEFAULT '2017-12-31 01:02:03';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'p2' AND has_default = 1;
|
||
name default_value
|
||
p2 999e7e1083
|
||
SELECT count(*) = max(a) FROM t1 GROUP BY p2;
|
||
count(*) = max(a)
|
||
1
|
||
INSERT INTO t1(a, p2) VALUES(0, now());
|
||
SELECT count(*) FROM t1 GROUP BY p2;
|
||
count(*)
|
||
26
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN q1 ENUM ('value1','value2','value3'), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'q1' AND has_default = 1;
|
||
name default_value
|
||
q1 NULL
|
||
INSERT INTO t1(a, q1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE q1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT q1 FROM t1 WHERE q1 = 1;
|
||
q1
|
||
value1
|
||
ALTER TABLE t1 ADD COLUMN r1 SET ('a','b','c'), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'r1' AND has_default = 1;
|
||
name default_value
|
||
r1 NULL
|
||
INSERT INTO t1(a, r1) VALUES(0, 'a');
|
||
SELECT count(*) = max(a) FROM t1 WHERE r1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT r1 FROM t1 WHERE r1 = 'a';
|
||
r1
|
||
a
|
||
ALTER TABLE t1 ADD COLUMN s1 BLOB, ADD COLUMN s2 TEXT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 's1' OR name = 's2') AND has_default = 1;
|
||
name default_value
|
||
s1 NULL
|
||
s2 NULL
|
||
INSERT INTO t1(a, s1, s2) VALUES(0, 0x0102030405, 'abcd qwerty');
|
||
SELECT count(*) = max(a) FROM t1 WHERE s1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE s2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(s1) FROM t1 WHERE s1 = 0x0102030405;
|
||
hex(s1)
|
||
0102030405
|
||
SELECT s2 FROM t1 WHERE s2 = 'abcd qwerty';
|
||
s2
|
||
abcd qwerty
|
||
ALTER TABLE t1 ADD COLUMN u1 BLOB NOT NULL, ADD COLUMN u2 TEXT NOT NULL;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'u1' OR name = 'u2') AND has_default = 1;
|
||
name default_value
|
||
u1
|
||
u2
|
||
INSERT INTO t1(a, u1, u2) VALUES(0, 0x0102030405, 'abcd qwerty');
|
||
SELECT count(*) = max(a) FROM t1 WHERE u1 = '';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE u2 = '';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(u1) FROM t1 WHERE u1 = 0x0102030405;
|
||
hex(u1)
|
||
0102030405
|
||
SELECT u2 FROM t1 WHERE u2 = 'abcd qwerty';
|
||
u2
|
||
abcd qwerty
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` int(11) DEFAULT NULL,
|
||
`c2` int(11) NOT NULL DEFAULT '10',
|
||
`d1` bigint(20) DEFAULT NULL,
|
||
`d2` bigint(20) NOT NULL DEFAULT '1234567890',
|
||
`e1` smallint(6) DEFAULT NULL,
|
||
`e2` smallint(6) NOT NULL DEFAULT '10',
|
||
`f1` tinyint(4) DEFAULT NULL,
|
||
`f2` tinyint(4) NOT NULL DEFAULT '123',
|
||
`g1` mediumint(9) DEFAULT NULL,
|
||
`g2` mediumint(9) NOT NULL DEFAULT '12345',
|
||
`h1` float DEFAULT NULL,
|
||
`h2` float NOT NULL DEFAULT '12.34',
|
||
`i1` decimal(5,2) DEFAULT NULL,
|
||
`i2` double DEFAULT NULL,
|
||
`j1` decimal(5,2) NOT NULL DEFAULT '100.00',
|
||
`j2` double NOT NULL DEFAULT '1000.5678',
|
||
`k1` bit(8) DEFAULT NULL,
|
||
`k2` bit(8) NOT NULL DEFAULT b'101010',
|
||
`l1` char(50) DEFAULT NULL,
|
||
`l2` varchar(100) DEFAULT NULL,
|
||
`m1` char(50) DEFAULT 'The fox jumps over',
|
||
`m2` varchar(50) DEFAULT 'The fox jumps over the lazy dog.',
|
||
`n1` binary(10) DEFAULT NULL,
|
||
`n2` varbinary(10) DEFAULT NULL,
|
||
`o1` binary(10) DEFAULT '"3D\0\0\0\0\0\0',
|
||
`o2` varbinary(10) DEFAULT 'Ufw?',
|
||
`p1` datetime DEFAULT NULL,
|
||
`p2` datetime NOT NULL DEFAULT '2017-12-31 01:02:03',
|
||
`q1` enum('value1','value2','value3') DEFAULT NULL,
|
||
`r1` set('a','b','c') DEFAULT NULL,
|
||
`s1` blob,
|
||
`s2` text,
|
||
`u1` blob NOT NULL,
|
||
`u2` text NOT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 2:
|
||
# Create a small table, add some columns instantly, along with
|
||
# virtual columns
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL, ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c) VALUES(0, 6, 20);
|
||
SELECT * FROM t1;
|
||
a b c d
|
||
1 1 0 2
|
||
2 2 0 4
|
||
3 3 0 6
|
||
4 4 0 8
|
||
5 5 0 10
|
||
6 6 20 12
|
||
ALTER TABLE t1 ADD COLUMN e VARCHAR(100) DEFAULT 'ABCD EFGH', ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(e));
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, c, e) VALUES(0, 20, 'Hello'), (0, 20, 'World'), (0, 20, 'Hello World');
|
||
SELECT * FROM t1;
|
||
a b c d e f
|
||
1 1 0 2 ABCD EFGH 9
|
||
2 2 0 4 ABCD EFGH 9
|
||
3 3 0 6 ABCD EFGH 9
|
||
4 4 0 8 ABCD EFGH 9
|
||
5 5 0 10 ABCD EFGH 9
|
||
6 6 20 12 ABCD EFGH 9
|
||
7 NULL 20 NULL Hello 5
|
||
8 NULL 20 NULL World 5
|
||
9 NULL 20 NULL Hello World 11
|
||
ALTER TABLE t1 ADD COLUMN g VARCHAR(100) GENERATED ALWAYS AS (e), ADD COLUMN h BIGINT DEFAULT 10000, ADD COLUMN i BIGINT GENERATED ALWAYS AS (h * 2 + b);
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c d e f g h i
|
||
1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001
|
||
2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002
|
||
3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003
|
||
4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004
|
||
5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005
|
||
6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006
|
||
7 NULL 20 NULL Hello 5 Hello 10000 NULL
|
||
8 NULL 20 NULL World 5 World 10000 NULL
|
||
9 NULL 20 NULL Hello World 11 Hello World 10000 NULL
|
||
INSERT INTO t1(a, b, c, h) VALUES(0, 7, 40, 2000), (0, 7, 40, 20000);
|
||
SELECT * FROM t1;
|
||
a b c d e f g h i
|
||
1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001
|
||
2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002
|
||
3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003
|
||
4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004
|
||
5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005
|
||
6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006
|
||
7 NULL 20 NULL Hello 5 Hello 10000 NULL
|
||
8 NULL 20 NULL World 5 World 10000 NULL
|
||
9 NULL 20 NULL Hello World 11 Hello World 10000 NULL
|
||
10 7 40 14 ABCD EFGH 9 ABCD EFGH 2000 4007
|
||
11 7 40 14 ABCD EFGH 9 ABCD EFGH 20000 40007
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL,
|
||
`d` int(11) GENERATED ALWAYS AS ((`b` * 2)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'ABCD EFGH',
|
||
`f` int(11) GENERATED ALWAYS AS (length(`e`)) VIRTUAL,
|
||
`g` varchar(100) GENERATED ALWAYS AS (`e`) VIRTUAL,
|
||
`h` bigint(20) DEFAULT '10000',
|
||
`i` bigint(20) GENERATED ALWAYS AS (((`h` * 2) + `b`)) VIRTUAL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 3:
|
||
# Create a small table, add some columns instantly, then change
|
||
# their default values, check original default values are correct
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
INSERT INTO t1(a, b, c, e) VALUES(0, 6, 200, 'Good day'), (0, 7, 300, 'Good DAY');
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'c' AND has_default = 1;
|
||
default_value
|
||
80000064
|
||
ALTER TABLE t1 ALTER COLUMN c SET DEFAULT 500;
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'c' AND
|
||
has_default = 1;
|
||
default_value
|
||
80000064
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
INSERT INTO t1(a, b) VALUES(0, 8), (0, 9);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'e' AND has_default = 1;
|
||
default_value
|
||
48656c6c6f20776f726c64
|
||
ALTER TABLE t1 ALTER COLUMN e SET DEFAULT 'HELLO MySQL!';
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'e' AND has_default = 1;
|
||
default_value
|
||
48656c6c6f20776f726c64
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
INSERT INTO t1(a, b) VALUES(0, 10), (0, 20);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
10 10 500 1010 HELLO MySQL!
|
||
11 20 500 1020 HELLO MySQL!
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '500',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'HELLO MySQL!',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 4:
|
||
# Create a small table, add some columns instantly, then do DML
|
||
# on the table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET c = 200 WHERE a > 3;
|
||
SELECT distinct(c) FROM t1;
|
||
c
|
||
100
|
||
200
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
DELETE FROM t1 WHERE c = 100;
|
||
UPDATE t1 SET c = 300;
|
||
SELECT distinct(c) FROM t1;
|
||
c
|
||
300
|
||
SELECT count(*) FROM t1;
|
||
count(*)
|
||
16
|
||
ALTER TABLE t1 ADD COLUMN t DATETIME DEFAULT CURRENT_TIMESTAMP;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET e = 'Hello MySQL' WHERE a > 10;
|
||
UPDATE t1 SET e = 'Hello MySQL!!' WHERE a > 20;
|
||
SELECT distinct(e) FROM t1;
|
||
e
|
||
Hello world
|
||
Hello MySQL
|
||
Hello MySQL!!
|
||
UPDATE t1 SET c = 500 WHERE e LIKE '%world%';
|
||
SELECT c, e FROM t1 GROUP BY c, e;
|
||
c e
|
||
500 Hello world
|
||
300 Hello MySQL
|
||
300 Hello MySQL!!
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
UPDATE t1 SET t = CURRENT_TIMESTAMP WHERE a < 50;
|
||
SELECT count(t) FROM t1 GROUP BY t;
|
||
count(t)
|
||
16
|
||
16
|
||
DELETE FROM t1 WHERE a < 50;
|
||
SELECT count(t) FROM t1 GROUP BY t;
|
||
count(t)
|
||
16
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
`t` datetime DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 5:
|
||
# Create a small table, add some columns instantly, then do DDL
|
||
# to build indexes
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY(c);
|
||
EXPLAIN SELECT c FROM t1;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index NULL c # NULL # 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`c` AS `c` from `test`.`t1`
|
||
SELECT c FROM t1 WHERE c != 100;
|
||
c
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
UPDATE t1 SET e = 'Hello MySQL' WHERE a > 30;
|
||
ALTER TABLE t1 ADD KEY(e);
|
||
EXPLAIN SELECT e FROM t1;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index NULL e # NULL # 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`e` AS `e` from `test`.`t1`
|
||
SELECT count(e) FROM t1 WHERE e LIKE '%MySQL%';
|
||
count(e)
|
||
17
|
||
SELECT count(e) FROM t1 WHERE e LIKE '%world%';
|
||
count(e)
|
||
23
|
||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a, c);
|
||
SELECT a, c, e FROM t1 WHERE a > 25 AND a < 40;
|
||
a c e
|
||
28 100 Hello world
|
||
29 100 Hello world
|
||
30 100 Hello world
|
||
31 100 Hello MySQL
|
||
32 100 Hello MySQL
|
||
33 100 Hello MySQL
|
||
34 100 Hello MySQL
|
||
35 100 Hello MySQL
|
||
36 100 Hello MySQL
|
||
37 100 Hello MySQL
|
||
38 100 Hello MySQL
|
||
39 100 Hello MySQL
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
PRIMARY KEY (`a`,`c`),
|
||
KEY `c` (`c`),
|
||
KEY `e` (`e`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 6:
|
||
# Create a small table, add some columns instantly, then do DML
|
||
# on the table, and some simple rollback
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
START TRANSACTION;
|
||
INSERT INTO t1(a, b) VALUES(0, 6);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 100 206 Hello world
|
||
ROLLBACK;
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c = 500 WHERE a = 1;
|
||
UPDATE t1 SET b = 1000 WHERE a = 2;
|
||
SELECT a, b, c FROM t1 WHERE a = 1 OR a = 2;
|
||
a b c
|
||
1 1 500
|
||
2 1000 100
|
||
ROLLBACK;
|
||
SELECT a, b, c FROM t1;
|
||
a b c
|
||
1 1 100
|
||
2 2 100
|
||
3 3 100
|
||
4 4 100
|
||
5 5 100
|
||
START TRANSACTION;
|
||
DELETE FROM t1 WHERE a < 5;
|
||
INSERT INTO t1(a, b) VALUES(0, 6);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
5 5 100 205 Hello world
|
||
7 6 100 206 Hello world
|
||
ROLLBACK;
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1(id INT PRIMARY KEY, c1 VARCHAR(4000), c2 VARCHAR(4000), c3 VARCHAR(1000)) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(1, repeat('a', 4000), repeat('b', 4000), repeat('c', 1));
|
||
SELECT id, length(c1), length(c2), length(c3) FROM t1;
|
||
id length(c1) length(c2) length(c3)
|
||
1 4000 4000 1
|
||
ALTER TABLE t1 ADD COLUMN c4 VARCHAR(500) NOT NULL DEFAULT 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd';
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c1 = repeat('x', 200) WHERE id = 1;
|
||
ROLLBACK;
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c4 = 'x' WHERE id = 1;
|
||
ROLLBACK;
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 7:
|
||
# Confirm some ADD COLUMN are instant, some are not
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD COLUMN d INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN e INT NOT NULL DEFAULT 100, ADD KEY(e);
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN f INT NOT NULL DEFAULT 100, FORCE;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN g INT NOT NULL DEFAULT 100, ALGORITHM=INPLACE;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`d` int(11) NOT NULL DEFAULT '100',
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`e` int(11) NOT NULL DEFAULT '100',
|
||
`f` int(11) NOT NULL DEFAULT '100',
|
||
`g` int(11) NOT NULL DEFAULT '100',
|
||
PRIMARY KEY (`a`),
|
||
KEY `e` (`e`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c TEXT, FULLTEXT(c)) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1, 'Hello'), (0, 2, 'HELLO'), (0, 3, 'World'), (0, 4, 'Hello world'), (0, 5, 'HELLO WORLD');
|
||
ALTER TABLE t1 ADD COLUMN d INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 8:
|
||
# Check FK constraints on instantly added columns
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
CREATE TABLE t2(a INT NOT NULL PRIMARY KEY, b INT, c INT, KEY(c));
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(1, 2, 3), (2, 3, 4), (3, 4, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 3;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET c = 4 WHERE a = 2;
|
||
UPDATE t1 SET c = 5 WHERE a = 3;
|
||
ALTER TABLE t1 ADD KEY(c);
|
||
ALTER TABLE t2 ADD FOREIGN KEY (c) REFERENCES t1(c) ON UPDATE CASCADE, ALGORITHM = COPY;
|
||
UPDATE t1 SET c = 10 WHERE a = 1;
|
||
SELECT c FROM t2;
|
||
c
|
||
4
|
||
5
|
||
10
|
||
UPDATE t1 SET c = 10;
|
||
SELECT c FROM t2;
|
||
c
|
||
10
|
||
10
|
||
10
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '3',
|
||
PRIMARY KEY (`a`),
|
||
KEY `c` (`c`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t2;
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 9:
|
||
# Instant ADD COLUMN on partitioned table, only simple test here
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT PARTITION BY HASH(a) PARTITIONS 3;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
3 3 5
|
||
6 6 5
|
||
1 1 5
|
||
4 4 5
|
||
7 7 5
|
||
2 2 5
|
||
5 5 5
|
||
8 8 5
|
||
INSERT INTO t1 VALUES(0, 9, 10), (0, 10, 20);
|
||
SELECT * FROM t1 WHERE b > 8;
|
||
a b c
|
||
9 9 10
|
||
10 10 20
|
||
UPDATE t1 SET c = 8 WHERE a = 1 OR a = 3 OR a = 5 OR a = 7;
|
||
SELECT * FROM t1;
|
||
a b c
|
||
3 3 8
|
||
6 6 5
|
||
9 9 10
|
||
1 1 8
|
||
4 4 5
|
||
7 7 8
|
||
10 10 20
|
||
2 2 5
|
||
5 5 8
|
||
8 8 5
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
/*!50100 PARTITION BY HASH (`a`)
|
||
PARTITIONS 3 */
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT, b INT) ROW_FORMAT=REDUNDANT PARTITION BY HASH(a) PARTITIONS 2;;
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 CHANGE COLUMN c c1 INT;
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 10:
|
||
# EXCHANGE PARTITION is not allowed if either is instant
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT NOT NULL DEFAULT 5) ROW_FORMAT=REDUNDANT PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20), PARTITION p3 VALUES LESS THAN (30));;
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
ERROR HY000: Non matching attribute 'INSTANT COLUMN(s)' between partition and table
|
||
ALTER TABLE t2 ADD COLUMN d INT;
|
||
ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=INPLACE;
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
ERROR HY000: Non matching attribute 'INSTANT COLUMN(s)' between partition and table
|
||
OPTIMIZE TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 optimize note Table does not support optimize, doing recreate + analyze instead
|
||
test.t2 optimize status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
`d` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
`d` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
/*!50100 PARTITION BY RANGE (`a`)
|
||
(PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||
PARTITION p2 VALUES LESS THAN (20) ENGINE = InnoDB,
|
||
PARTITION p3 VALUES LESS THAN (30) ENGINE = InnoDB) */
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
DROP TABLE t1, t2;
|
||
#
|
||
# Scenario 11:
|
||
# PRIMARY KEY with more than one column, at least to verify it works with REDUDANT
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY(a, b)) ROW_FORMAT=REDUNDANT;;
|
||
INSERT INTO t1 VALUES(0, 1), (1, 2), (2, 3), (3, 4);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
0 1 5
|
||
1 2 5
|
||
2 3 5
|
||
3 4 5
|
||
UPDATE t1 SET c = b WHERE b <= 2;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
0 1 1
|
||
1 2 2
|
||
2 3 5
|
||
3 4 5
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 12:
|
||
# Mix ALTER PARTITION and ALTER TABLE ... INPLACE. This is to check if first partition is not
|
||
# instant after ALTER PARTITION, will the metadata be copied correctly
|
||
#
|
||
CREATE TABLE t1 (col1 INT, col2 INT, col3 INT, col4 TEXT) ENGINE = InnoDB PARTITION BY RANGE(col1 * 2) ( PARTITION p0 VALUES LESS THAN (128), PARTITION p1 VALUES LESS THAN (256) , PARTITION p2 VALUES LESS THAN (384) , PARTITION p3 VALUES LESS THAN MAXVALUE);;
|
||
INSERT INTO t1 VALUES(1, 2, 3, 'abcdefg'), (100, 200, 300, 'qwerty'), (200, 300, 400, 'asdfg');
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, ADD COLUMN col5 VARCHAR(500), ADD COLUMN col6 TEXT;
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 4` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 4
|
||
4
|
||
ALTER TABLE t1 ALGORITHM INPLACE, REORGANIZE PARTITION p0 INTO (PARTITION p0_a VALUES LESS THAN (64), PARTITION p0_b VALUES LESS THAN (128));
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, ADD KEY idx4(col4(10));
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, LOCK EXCLUSIVE, REORGANIZE PARTITION p0_a, p0_b INTO (PARTITION p0 VALUES LESS THAN (128) TABLESPACE innodb_file_per_table);
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY idx3(col3);
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
col1 col2 col3 col4 col5 col6
|
||
1 2 3 abcdefg NULL NULL
|
||
100 200 300 qwerty NULL NULL
|
||
200 300 400 asdfg NULL NULL
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT PARTITION BY HASH(a) PARTITIONS 3;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
ALTER TABLE t1 ADD PARTITION PARTITIONS 10;
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY(b);
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
1 1 5
|
||
2 2 5
|
||
3 3 5
|
||
4 4 5
|
||
5 5 5
|
||
6 6 5
|
||
7 7 5
|
||
8 8 5
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 13:
|
||
# Create a table with a two level clustered index, do instant ADD COLUMN, then the non-leaf node
|
||
# should be parsed correctly
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, d INT NOT NULL, b BLOB NOT NULL, c VARCHAR(87), INDEX(d), INDEX(a ASC), PRIMARY KEY (a, d DESC, c DESC)) ROW_FORMAT=REDUNDANT PARTITION BY LINEAR KEY(c) PARTITIONS 9;;
|
||
INSERT INTO t1(d, b, c) VALUES(1, 2, 'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(2, 3, 'aaaaaaaaaahhhhhhhhhhbbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(3, 4, 'bbbbbbbbbbaaaaaaaaaahhhhhhhhhhccccccccccddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(4, 5, 'eeeeeeeeeehhhhhhhhhhbbbbbbbbbbccccccccccddddddddddaaaaaaaaaaffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(5, 6, 'aaaaaaaaaahhhhhhhhhhbbbbbbbbbbddddddddddcccccccccceeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(6, 7, 'cccccccccchhhhhhhhhhbbbbbbbbbbaaaaaaaaaaddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
ALTER TABLE t1 ADD COLUMN nc086 BIGINT NOT NULL FIRST, ALGORITHM=INPLACE, LOCK=DEFAULT;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD COLUMN nc082 TINYTEXT;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT COUNT(*) FROM t1;
|
||
COUNT(*)
|
||
384
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 14:
|
||
# Create a small table, and add GIS kinds of new columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 POINT, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, ST_PointFromText('POINT(10 10)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN d1 LINESTRING, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd1' AND has_default = 1;
|
||
name default_value
|
||
d1 NULL
|
||
INSERT INTO t1(a, d1) VALUES(0, ST_LineFromText('LINESTRING(0 0,0 10,10 0)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE d1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN e1 POLYGON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e1' AND has_default = 1;
|
||
name default_value
|
||
e1 NULL
|
||
INSERT INTO t1(a, e1) VALUES(0, ST_PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE e1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN f1 MULTIPOINT, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f1' AND has_default = 1;
|
||
name default_value
|
||
f1 NULL
|
||
INSERT INTO t1(a, f1) VALUES(0, ST_MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE f1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN g1 MULTILINESTRING, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g1' AND has_default = 1;
|
||
name default_value
|
||
g1 NULL
|
||
INSERT INTO t1(a, g1) VALUES(0, ST_MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE g1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN h1 MULTIPOLYGON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h1' AND has_default = 1;
|
||
name default_value
|
||
h1 NULL
|
||
INSERT INTO t1(a, h1) VALUES(0, ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE h1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN i1 GEOMETRYCOLLECTION, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'i1' AND has_default = 1;
|
||
name default_value
|
||
i1 NULL
|
||
INSERT INTO t1(a, i1) VALUES(0, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE i1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN j1 GEOMETRY, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'j1' AND has_default = 1;
|
||
name default_value
|
||
j1 NULL
|
||
INSERT INTO t1(a, j1) VALUES(0, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE j1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` point DEFAULT NULL,
|
||
`d1` linestring DEFAULT NULL,
|
||
`e1` polygon DEFAULT NULL,
|
||
`f1` multipoint DEFAULT NULL,
|
||
`g1` multilinestring DEFAULT NULL,
|
||
`h1` multipolygon DEFAULT NULL,
|
||
`i1` geomcollection DEFAULT NULL,
|
||
`j1` geometry DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 15:
|
||
# Create a small table, and add JSON columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 JSON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, '{"key1": "value1", "key2": "value2"}');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` json DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 16:
|
||
# Create a small table, and add INSTANT columns and verify with trigger
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE TRIGGER t1_ai AFTER INSERT ON t1 FOR EACH ROW
|
||
INSERT INTO t2 VALUES(0,6);
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP TRIGGER t1_ai;
|
||
ALTER TABLE t2 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'cccc', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
c1 63636363
|
||
CREATE TRIGGER t2_ai AFTER INSERT ON t2 FOR EACH ROW
|
||
INSERT INTO t1(a,c1) VALUES(0,'eeee');
|
||
INSERT INTO t2(a, c1) VALUES(0, 'dddd');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='cccc';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'dddd';
|
||
c1
|
||
dddd
|
||
DROP TRIGGER t2_ai;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1,t2;
|
||
#
|
||
# Scenario 17:
|
||
# Create a small table, and add INSTANT columns and verify with storedprocedure
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE PROCEDURE p1() INSERT INTO t1(a,c1) VALUES(0, 'bbbb');
|
||
CALL p1();
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP PROCEDURE p1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 18:
|
||
# Create a small table, and add INSTANT columns and verify with view
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
SELECT * FROM v1;
|
||
a b c1
|
||
1 1 aaaa
|
||
2 2 aaaa
|
||
3 3 aaaa
|
||
4 4 aaaa
|
||
5 5 aaaa
|
||
6 NULL bbbb
|
||
DROP VIEW v1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 19:
|
||
# Create a small table, and add INSTANT columns and drop it and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
ALTER TABLE t1 DROP COLUMN c1;
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 20:
|
||
# Create a small table, and add INSTANT columns and rename table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 RENAME t2;
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t2(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t2;
|
||
#
|
||
# Scenario 21:
|
||
# Create a small table, and add INSTANT columns and change its data type INSTANTly won't work
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
ALTER TABLE t1 CHANGE c1 c2 CHAR(10) NOT NULL DEFAULT 'cccc';
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c2` char(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 22:
|
||
# Create a small table, and add INSTANT columns and create hash,btree multi column index and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE INDEX id1 ON t1(c1) USING BTREE;
|
||
CREATE INDEX id2 ON t1(c1) USING HASH;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
Warning 1831 Duplicate index 'id2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP INDEX id1 ON t1;
|
||
DROP INDEX id2 ON t1;
|
||
ALTER TABLE t1 ADD COLUMN c2 VARCHAR(10) NOT NULL DEFAULT 'cccc', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c2' AND has_default = 1;
|
||
name default_value
|
||
c2 63636363
|
||
CREATE INDEX id1 ON t1(c1 ASC,c2 DESC) USING BTREE;
|
||
INSERT INTO t1(a, c2) VALUES(0, 'dddd');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='cccc';
|
||
count(*) = max(a)
|
||
NULL
|
||
SELECT c1 FROM t1 WHERE c1 = 'dddd';
|
||
c1
|
||
ALTER TABLE t1 RENAME INDEX id1 TO id2;
|
||
DROP INDEX id2 ON t1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
`c2` varchar(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 23:
|
||
# Create a small table, and add INSTANT columns and perform table join operation
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'cccc');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'cccc';
|
||
c1
|
||
cccc
|
||
ALTER TABLE t2 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'bbbb', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
c1 62626262
|
||
INSERT INTO t2(a, c1) VALUES(0, 'cccc');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='bbbb';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'cccc';
|
||
c1
|
||
cccc
|
||
SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1;
|
||
a b c1 a b c1
|
||
6 NULL cccc 6 NULL cccc
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'bbbb',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
DROP TABLE t2;
|
||
#
|
||
# Scenario 24:
|
||
# Create a small table, and add stored and(or) virtual columns
|
||
# after last stored column in the table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT, d INT GENERATED ALWAYS AS (b + c) VIRTUAL, e INT GENERATED ALWAYS AS (b * c) VIRTUAL) ROW_FORMAT=REDUNDANT;
|
||
INSERT INTO t1(a, b, c) VALUES(0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 5), (0, 5, 6);
|
||
ALTER TABLE t1 ADD COLUMN h INT NOT NULL AFTER c;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c, h) VALUES(0, 6, 20, 40);
|
||
SELECT * FROM t1;
|
||
a b c h d e
|
||
1 1 2 0 3 2
|
||
2 2 3 0 5 6
|
||
3 3 4 0 7 12
|
||
4 4 5 0 9 20
|
||
5 5 6 0 11 30
|
||
6 6 20 40 26 120
|
||
ALTER TABLE t1 ADD COLUMN i VARCHAR(100) DEFAULT 'ABCD EFGH' AFTER h, ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(i)) AFTER i;
|
||
Table id did not change
|
||
SELECT 3 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c, h, i) VALUES(0, 20, 30, 50, 'qwerty');
|
||
SELECT * FROM t1;
|
||
a b c h i f d e
|
||
1 1 2 0 ABCD EFGH 9 3 2
|
||
2 2 3 0 ABCD EFGH 9 5 6
|
||
3 3 4 0 ABCD EFGH 9 7 12
|
||
4 4 5 0 ABCD EFGH 9 9 20
|
||
5 5 6 0 ABCD EFGH 9 11 30
|
||
6 6 20 40 ABCD EFGH 9 26 120
|
||
7 20 30 50 qwerty 6 50 600
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) DEFAULT NULL,
|
||
`h` int(11) NOT NULL,
|
||
`i` varchar(100) DEFAULT 'ABCD EFGH',
|
||
`f` int(11) GENERATED ALWAYS AS (length(`i`)) VIRTUAL,
|
||
`d` int(11) GENERATED ALWAYS AS ((`b` + `c`)) VIRTUAL,
|
||
`e` int(11) GENERATED ALWAYS AS ((`b` * `c`)) VIRTUAL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=REDUNDANT
|
||
DROP TABLE t1;
|
||
############################################
|
||
# Test instant ADD COLUMN for DYNAMIC format
|
||
############################################
|
||
#
|
||
# Scenario 1:
|
||
# Create a small table, and add all kinds of new columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 INT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 1;
|
||
c1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN c2 INT NOT NULL DEFAULT 10;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c2' AND has_default = 1;
|
||
name default_value
|
||
c2 8000000a
|
||
INSERT INTO t1(a, c2) VALUES(0, 11);
|
||
SELECT count(*) = max(a) FROM t1 WHERE c2 = 10;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c2 FROM t1 WHERE c2 = 11;
|
||
c2
|
||
11
|
||
ALTER TABLE t1 ADD COLUMN d1 BIGINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd1' AND has_default = 1;
|
||
name default_value
|
||
d1 NULL
|
||
INSERT INTO t1(a, d1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE d1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT d1 FROM t1 WHERE d1 = 1;
|
||
d1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN d2 BIGINT NOT NULL DEFAULT 1234567890;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd2' AND has_default = 1;
|
||
name default_value
|
||
d2 80000000499602d2
|
||
INSERT INTO t1(a, d2) VALUES(0, 1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE d2 = 1234567890;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT d2 FROM t1 WHERE d2 = 1234;
|
||
d2
|
||
1234
|
||
ALTER TABLE t1 ADD COLUMN e1 SMALLINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e1' AND has_default = 1;
|
||
name default_value
|
||
e1 NULL
|
||
INSERT INTO t1(a, e1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE e1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT e1 FROM t1 WHERE e1 = 1;
|
||
e1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN e2 SMALLINT NOT NULL DEFAULT 10;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e2' AND has_default = 1;
|
||
name default_value
|
||
e2 800a
|
||
INSERT INTO t1(a, e2) VALUES(0, 11);
|
||
SELECT count(*) = max(a) FROM t1 WHERE e2 = 10;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT e2 FROM t1 WHERE e2 = 11;
|
||
e2
|
||
11
|
||
ALTER TABLE t1 ADD COLUMN f1 TINYINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f1' AND has_default = 1;
|
||
name default_value
|
||
f1 NULL
|
||
INSERT INTO t1(a, f1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE f1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT f1 FROM t1 WHERE f1 = 1;
|
||
f1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN f2 TINYINT NOT NULL DEFAULT 123;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f2' AND has_default = 1;
|
||
name default_value
|
||
f2 fb
|
||
INSERT INTO t1(a, f2) VALUES(0, 12);
|
||
SELECT count(*) = max(a) FROM t1 WHERE f2 = 123;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT f2 FROM t1 WHERE f2 = 12;
|
||
f2
|
||
12
|
||
ALTER TABLE t1 ADD COLUMN g1 MEDIUMINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g1' AND has_default = 1;
|
||
name default_value
|
||
g1 NULL
|
||
INSERT INTO t1(a, g1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE g1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT g1 FROM t1 WHERE g1 = 1;
|
||
g1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN g2 MEDIUMINT NOT NULL DEFAULT 12345;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g2' AND has_default = 1;
|
||
name default_value
|
||
g2 803039
|
||
INSERT INTO t1(a, g2) VALUES(0, 1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE g2 = 12345;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT g2 FROM t1 WHERE g2 = 1234;
|
||
g2
|
||
1234
|
||
ALTER TABLE t1 ADD COLUMN h1 FLOAT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h1' AND has_default = 1;
|
||
name default_value
|
||
h1 NULL
|
||
INSERT INTO t1(a, h1) VALUES(0, 1.0);
|
||
SELECT count(*) = max(a) FROM t1 WHERE h1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT h1 FROM t1 WHERE h1 = 1;
|
||
h1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN h2 FLOAT NOT NULL DEFAULT 12.34;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h2' AND has_default = 1;
|
||
name default_value
|
||
h2 a4704541
|
||
INSERT INTO t1(a, h2) VALUES(0, 1.234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE h2 = 12.34;
|
||
count(*) = max(a)
|
||
NULL
|
||
SELECT h2 FROM t1 WHERE h2 = 1.234;
|
||
h2
|
||
ALTER TABLE t1 ADD COLUMN i1 DECIMAL(5, 2), ADD COLUMN i2 double, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'i1' OR name = 'i2') AND has_default = 1;
|
||
name default_value
|
||
i1 NULL
|
||
i2 NULL
|
||
INSERT INTO t1(a, i1, i2) VALUES(0, 10.10, 20.20);
|
||
SELECT count(*) = max(a) FROM t1 WHERE i1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE i2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT i1 FROM t1 WHERE i1 = 10.10;
|
||
i1
|
||
10.10
|
||
SELECT i2 FROM t1 WHERE i2 = 20.20;
|
||
i2
|
||
20.2
|
||
ALTER TABLE t1 ADD COLUMN j1 DECIMAL(5, 2) NOT NULL DEFAULT 100.00, ADD COLUMN j2 double NOT NULL DEFAULT 1000.5678;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'j1' OR name = 'j2') AND has_default = 1;
|
||
name default_value
|
||
j1 806400
|
||
j2 5af5b9da8a448f40
|
||
INSERT INTO t1(a, j1, j2) VALUES(0, 90.90, 1000.1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE j1 = 100.00;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE j2 = 1000.5678;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT j1 FROM t1 WHERE j1 = 90.90;
|
||
j1
|
||
90.90
|
||
SELECT j2 FROM t1 WHERE j2 = 1000.1234;
|
||
j2
|
||
1000.1234
|
||
ALTER TABLE t1 ADD COLUMN k1 BIT(8), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'k1' AND has_default = 1;
|
||
name default_value
|
||
k1 NULL
|
||
INSERT INTO t1(a, k1) VALUES(0, b'010101');
|
||
SELECT count(*) = max(a) FROM t1 WHERE k1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(k1) FROM t1 WHERE k1 = b'010101';
|
||
hex(k1)
|
||
15
|
||
ALTER TABLE t1 ADD COLUMN k2 BIT(8) NOT NULL DEFAULT b'101010';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'k2' AND has_default = 1;
|
||
name default_value
|
||
k2 2a
|
||
INSERT INTO t1(a, k2) VALUES(0, b'110011');
|
||
SELECT count(*) = max(a) FROM t1 WHERE k2 = b'101010';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(k2) FROM t1 WHERE k2 = b'110011';
|
||
hex(k2)
|
||
33
|
||
ALTER TABLE t1 ADD COLUMN l1 CHAR(50), ADD COLUMN l2 VARCHAR(100), ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'l1' OR name = 'l2') AND has_default = 1;
|
||
name default_value
|
||
l1 NULL
|
||
l2 NULL
|
||
INSERT INTO t1(a, l1, l2) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn ');
|
||
SELECT count(*) = max(a) FROM t1 WHERE l2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE l1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT l1 FROM t1 WHERE l1 = 'ABCD EFGH';
|
||
l1
|
||
ABCD EFGH
|
||
SELECT l2 FROM t1 WHERE l2 = 'abcdefg hijklmn ';
|
||
l2
|
||
abcdefg hijklmn
|
||
ALTER TABLE t1 ADD COLUMN m1 CHAR(50) default 'The fox jumps over', ADD COLUMN m2 VARCHAR(50) DEFAULT 'The fox jumps over the lazy dog.';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'm1' OR name = 'm2') AND has_default = 1;
|
||
name default_value
|
||
m1 54686520666f78206a756d7073206f7665722020202020202020202020202020202020202020202020202020202020202020
|
||
m2 54686520666f78206a756d7073206f76657220746865206c617a7920646f672e
|
||
INSERT INTO t1(a, m1, m2) VALUES(0, 'over the lazy dog', 'The lazy dog jumps over the fox.');
|
||
SELECT count(*) = max(a) FROM t1 WHERE m1 = 'The fox jumps over';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE m2 like 'The fox jumps%';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT m1 FROM t1 WHERE m1 = 'over the lazy dog';
|
||
m1
|
||
over the lazy dog
|
||
SELECT m2 FROM t1 WHERE m2 like '%the fox.';
|
||
m2
|
||
The lazy dog jumps over the fox.
|
||
ALTER TABLE t1 ADD COLUMN n1 BINARY(10), ADD COLUMN n2 VARBINARY(10), ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'n1' OR name = 'n2') AND has_default = 1;
|
||
name default_value
|
||
n1 NULL
|
||
n2 NULL
|
||
INSERT INTO t1(a, n1, n2) VALUES(0, 0x010203040506070809, 0x102030405060708090);
|
||
SELECT count(*) = max(a) FROM t1 WHERE n1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE n2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(n1) FROM t1 WHERE n1 = 0x01020304050607080900;
|
||
hex(n1)
|
||
01020304050607080900
|
||
SELECT hex(n2) FROM t1 WHERE n2 = 0x102030405060708090;
|
||
hex(n2)
|
||
102030405060708090
|
||
ALTER TABLE t1 ADD COLUMN o1 BINARY(10) DEFAULT 0x11223344, ADD COLUMN o2 VARBINARY(10) DEFAULT 0x55667788;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'o1' OR name = 'o2') AND has_default = 1;
|
||
name default_value
|
||
o1 11223344000000000000
|
||
o2 55667788
|
||
INSERT INTO t1(a, o1, o2) VALUES(0, 0x44332211, 0x88776655);
|
||
SELECT count(*) = max(a) FROM t1 WHERE o1 = 0x11223344000000000000;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE o2 = 0x55667788;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(o1) FROM t1 WHERE o1 = 0x44332211000000000000;
|
||
hex(o1)
|
||
44332211000000000000
|
||
SELECT hex(o2) FROM t1 WHERE o2 = 0x88776655;
|
||
hex(o2)
|
||
88776655
|
||
ALTER TABLE t1 ADD COLUMN p1 DATETIME, ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'p1' AND has_default = 1;
|
||
name default_value
|
||
p1 NULL
|
||
INSERT INTO t1(a, p1) VALUES(0, '2017-12-31 00:00:00');
|
||
SELECT count(*) = max(a) FROM t1 WHERE p1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT p1 FROM t1 WHERE p1 = '2017-12-31 00:00:00';
|
||
p1
|
||
2017-12-31 00:00:00
|
||
ALTER TABLE t1 ADD COLUMN p2 DATETIME NOT NULL DEFAULT '2017-12-31 01:02:03';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'p2' AND has_default = 1;
|
||
name default_value
|
||
p2 999e7e1083
|
||
SELECT count(*) = max(a) FROM t1 GROUP BY p2;
|
||
count(*) = max(a)
|
||
1
|
||
INSERT INTO t1(a, p2) VALUES(0, now());
|
||
SELECT count(*) FROM t1 GROUP BY p2;
|
||
count(*)
|
||
26
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN q1 ENUM ('value1','value2','value3'), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'q1' AND has_default = 1;
|
||
name default_value
|
||
q1 NULL
|
||
INSERT INTO t1(a, q1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE q1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT q1 FROM t1 WHERE q1 = 1;
|
||
q1
|
||
value1
|
||
ALTER TABLE t1 ADD COLUMN r1 SET ('a','b','c'), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'r1' AND has_default = 1;
|
||
name default_value
|
||
r1 NULL
|
||
INSERT INTO t1(a, r1) VALUES(0, 'a');
|
||
SELECT count(*) = max(a) FROM t1 WHERE r1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT r1 FROM t1 WHERE r1 = 'a';
|
||
r1
|
||
a
|
||
ALTER TABLE t1 ADD COLUMN s1 BLOB, ADD COLUMN s2 TEXT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 's1' OR name = 's2') AND has_default = 1;
|
||
name default_value
|
||
s1 NULL
|
||
s2 NULL
|
||
INSERT INTO t1(a, s1, s2) VALUES(0, 0x0102030405, 'abcd qwerty');
|
||
SELECT count(*) = max(a) FROM t1 WHERE s1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE s2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(s1) FROM t1 WHERE s1 = 0x0102030405;
|
||
hex(s1)
|
||
0102030405
|
||
SELECT s2 FROM t1 WHERE s2 = 'abcd qwerty';
|
||
s2
|
||
abcd qwerty
|
||
ALTER TABLE t1 ADD COLUMN u1 BLOB NOT NULL, ADD COLUMN u2 TEXT NOT NULL;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'u1' OR name = 'u2') AND has_default = 1;
|
||
name default_value
|
||
u1
|
||
u2
|
||
INSERT INTO t1(a, u1, u2) VALUES(0, 0x0102030405, 'abcd qwerty');
|
||
SELECT count(*) = max(a) FROM t1 WHERE u1 = '';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE u2 = '';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(u1) FROM t1 WHERE u1 = 0x0102030405;
|
||
hex(u1)
|
||
0102030405
|
||
SELECT u2 FROM t1 WHERE u2 = 'abcd qwerty';
|
||
u2
|
||
abcd qwerty
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` int(11) DEFAULT NULL,
|
||
`c2` int(11) NOT NULL DEFAULT '10',
|
||
`d1` bigint(20) DEFAULT NULL,
|
||
`d2` bigint(20) NOT NULL DEFAULT '1234567890',
|
||
`e1` smallint(6) DEFAULT NULL,
|
||
`e2` smallint(6) NOT NULL DEFAULT '10',
|
||
`f1` tinyint(4) DEFAULT NULL,
|
||
`f2` tinyint(4) NOT NULL DEFAULT '123',
|
||
`g1` mediumint(9) DEFAULT NULL,
|
||
`g2` mediumint(9) NOT NULL DEFAULT '12345',
|
||
`h1` float DEFAULT NULL,
|
||
`h2` float NOT NULL DEFAULT '12.34',
|
||
`i1` decimal(5,2) DEFAULT NULL,
|
||
`i2` double DEFAULT NULL,
|
||
`j1` decimal(5,2) NOT NULL DEFAULT '100.00',
|
||
`j2` double NOT NULL DEFAULT '1000.5678',
|
||
`k1` bit(8) DEFAULT NULL,
|
||
`k2` bit(8) NOT NULL DEFAULT b'101010',
|
||
`l1` char(50) DEFAULT NULL,
|
||
`l2` varchar(100) DEFAULT NULL,
|
||
`m1` char(50) DEFAULT 'The fox jumps over',
|
||
`m2` varchar(50) DEFAULT 'The fox jumps over the lazy dog.',
|
||
`n1` binary(10) DEFAULT NULL,
|
||
`n2` varbinary(10) DEFAULT NULL,
|
||
`o1` binary(10) DEFAULT '"3D\0\0\0\0\0\0',
|
||
`o2` varbinary(10) DEFAULT 'Ufw?',
|
||
`p1` datetime DEFAULT NULL,
|
||
`p2` datetime NOT NULL DEFAULT '2017-12-31 01:02:03',
|
||
`q1` enum('value1','value2','value3') DEFAULT NULL,
|
||
`r1` set('a','b','c') DEFAULT NULL,
|
||
`s1` blob,
|
||
`s2` text,
|
||
`u1` blob NOT NULL,
|
||
`u2` text NOT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 2:
|
||
# Create a small table, add some columns instantly, along with
|
||
# virtual columns
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL, ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c) VALUES(0, 6, 20);
|
||
SELECT * FROM t1;
|
||
a b c d
|
||
1 1 0 2
|
||
2 2 0 4
|
||
3 3 0 6
|
||
4 4 0 8
|
||
5 5 0 10
|
||
6 6 20 12
|
||
ALTER TABLE t1 ADD COLUMN e VARCHAR(100) DEFAULT 'ABCD EFGH', ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(e));
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, c, e) VALUES(0, 20, 'Hello'), (0, 20, 'World'), (0, 20, 'Hello World');
|
||
SELECT * FROM t1;
|
||
a b c d e f
|
||
1 1 0 2 ABCD EFGH 9
|
||
2 2 0 4 ABCD EFGH 9
|
||
3 3 0 6 ABCD EFGH 9
|
||
4 4 0 8 ABCD EFGH 9
|
||
5 5 0 10 ABCD EFGH 9
|
||
6 6 20 12 ABCD EFGH 9
|
||
7 NULL 20 NULL Hello 5
|
||
8 NULL 20 NULL World 5
|
||
9 NULL 20 NULL Hello World 11
|
||
ALTER TABLE t1 ADD COLUMN g VARCHAR(100) GENERATED ALWAYS AS (e), ADD COLUMN h BIGINT DEFAULT 10000, ADD COLUMN i BIGINT GENERATED ALWAYS AS (h * 2 + b);
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c d e f g h i
|
||
1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001
|
||
2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002
|
||
3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003
|
||
4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004
|
||
5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005
|
||
6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006
|
||
7 NULL 20 NULL Hello 5 Hello 10000 NULL
|
||
8 NULL 20 NULL World 5 World 10000 NULL
|
||
9 NULL 20 NULL Hello World 11 Hello World 10000 NULL
|
||
INSERT INTO t1(a, b, c, h) VALUES(0, 7, 40, 2000), (0, 7, 40, 20000);
|
||
SELECT * FROM t1;
|
||
a b c d e f g h i
|
||
1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001
|
||
2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002
|
||
3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003
|
||
4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004
|
||
5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005
|
||
6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006
|
||
7 NULL 20 NULL Hello 5 Hello 10000 NULL
|
||
8 NULL 20 NULL World 5 World 10000 NULL
|
||
9 NULL 20 NULL Hello World 11 Hello World 10000 NULL
|
||
10 7 40 14 ABCD EFGH 9 ABCD EFGH 2000 4007
|
||
11 7 40 14 ABCD EFGH 9 ABCD EFGH 20000 40007
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL,
|
||
`d` int(11) GENERATED ALWAYS AS ((`b` * 2)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'ABCD EFGH',
|
||
`f` int(11) GENERATED ALWAYS AS (length(`e`)) VIRTUAL,
|
||
`g` varchar(100) GENERATED ALWAYS AS (`e`) VIRTUAL,
|
||
`h` bigint(20) DEFAULT '10000',
|
||
`i` bigint(20) GENERATED ALWAYS AS (((`h` * 2) + `b`)) VIRTUAL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 3:
|
||
# Create a small table, add some columns instantly, then change
|
||
# their default values, check original default values are correct
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
INSERT INTO t1(a, b, c, e) VALUES(0, 6, 200, 'Good day'), (0, 7, 300, 'Good DAY');
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'c' AND has_default = 1;
|
||
default_value
|
||
80000064
|
||
ALTER TABLE t1 ALTER COLUMN c SET DEFAULT 500;
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'c' AND
|
||
has_default = 1;
|
||
default_value
|
||
80000064
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
INSERT INTO t1(a, b) VALUES(0, 8), (0, 9);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'e' AND has_default = 1;
|
||
default_value
|
||
48656c6c6f20776f726c64
|
||
ALTER TABLE t1 ALTER COLUMN e SET DEFAULT 'HELLO MySQL!';
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'e' AND has_default = 1;
|
||
default_value
|
||
48656c6c6f20776f726c64
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
INSERT INTO t1(a, b) VALUES(0, 10), (0, 20);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
10 10 500 1010 HELLO MySQL!
|
||
11 20 500 1020 HELLO MySQL!
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '500',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'HELLO MySQL!',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 4:
|
||
# Create a small table, add some columns instantly, then do DML
|
||
# on the table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET c = 200 WHERE a > 3;
|
||
SELECT distinct(c) FROM t1;
|
||
c
|
||
100
|
||
200
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
DELETE FROM t1 WHERE c = 100;
|
||
UPDATE t1 SET c = 300;
|
||
SELECT distinct(c) FROM t1;
|
||
c
|
||
300
|
||
SELECT count(*) FROM t1;
|
||
count(*)
|
||
16
|
||
ALTER TABLE t1 ADD COLUMN t DATETIME DEFAULT CURRENT_TIMESTAMP;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET e = 'Hello MySQL' WHERE a > 10;
|
||
UPDATE t1 SET e = 'Hello MySQL!!' WHERE a > 20;
|
||
SELECT distinct(e) FROM t1;
|
||
e
|
||
Hello world
|
||
Hello MySQL
|
||
Hello MySQL!!
|
||
UPDATE t1 SET c = 500 WHERE e LIKE '%world%';
|
||
SELECT c, e FROM t1 GROUP BY c, e;
|
||
c e
|
||
500 Hello world
|
||
300 Hello MySQL
|
||
300 Hello MySQL!!
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
UPDATE t1 SET t = CURRENT_TIMESTAMP WHERE a < 50;
|
||
SELECT count(t) FROM t1 GROUP BY t;
|
||
count(t)
|
||
16
|
||
16
|
||
DELETE FROM t1 WHERE a < 50;
|
||
SELECT count(t) FROM t1 GROUP BY t;
|
||
count(t)
|
||
16
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
`t` datetime DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 5:
|
||
# Create a small table, add some columns instantly, then do DDL
|
||
# to build indexes
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY(c);
|
||
EXPLAIN SELECT c FROM t1;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index NULL c # NULL # 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`c` AS `c` from `test`.`t1`
|
||
SELECT c FROM t1 WHERE c != 100;
|
||
c
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
UPDATE t1 SET e = 'Hello MySQL' WHERE a > 30;
|
||
ALTER TABLE t1 ADD KEY(e);
|
||
EXPLAIN SELECT e FROM t1;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index NULL e # NULL # 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`e` AS `e` from `test`.`t1`
|
||
SELECT count(e) FROM t1 WHERE e LIKE '%MySQL%';
|
||
count(e)
|
||
17
|
||
SELECT count(e) FROM t1 WHERE e LIKE '%world%';
|
||
count(e)
|
||
23
|
||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a, c);
|
||
SELECT a, c, e FROM t1 WHERE a > 25 AND a < 40;
|
||
a c e
|
||
28 100 Hello world
|
||
29 100 Hello world
|
||
30 100 Hello world
|
||
31 100 Hello MySQL
|
||
32 100 Hello MySQL
|
||
33 100 Hello MySQL
|
||
34 100 Hello MySQL
|
||
35 100 Hello MySQL
|
||
36 100 Hello MySQL
|
||
37 100 Hello MySQL
|
||
38 100 Hello MySQL
|
||
39 100 Hello MySQL
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
PRIMARY KEY (`a`,`c`),
|
||
KEY `c` (`c`),
|
||
KEY `e` (`e`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 6:
|
||
# Create a small table, add some columns instantly, then do DML
|
||
# on the table, and some simple rollback
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
START TRANSACTION;
|
||
INSERT INTO t1(a, b) VALUES(0, 6);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 100 206 Hello world
|
||
ROLLBACK;
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c = 500 WHERE a = 1;
|
||
UPDATE t1 SET b = 1000 WHERE a = 2;
|
||
SELECT a, b, c FROM t1 WHERE a = 1 OR a = 2;
|
||
a b c
|
||
1 1 500
|
||
2 1000 100
|
||
ROLLBACK;
|
||
SELECT a, b, c FROM t1;
|
||
a b c
|
||
1 1 100
|
||
2 2 100
|
||
3 3 100
|
||
4 4 100
|
||
5 5 100
|
||
START TRANSACTION;
|
||
DELETE FROM t1 WHERE a < 5;
|
||
INSERT INTO t1(a, b) VALUES(0, 6);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
5 5 100 205 Hello world
|
||
7 6 100 206 Hello world
|
||
ROLLBACK;
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1(id INT PRIMARY KEY, c1 VARCHAR(4000), c2 VARCHAR(4000), c3 VARCHAR(1000)) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(1, repeat('a', 4000), repeat('b', 4000), repeat('c', 1));
|
||
SELECT id, length(c1), length(c2), length(c3) FROM t1;
|
||
id length(c1) length(c2) length(c3)
|
||
1 4000 4000 1
|
||
ALTER TABLE t1 ADD COLUMN c4 VARCHAR(500) NOT NULL DEFAULT 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd';
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c1 = repeat('x', 200) WHERE id = 1;
|
||
ROLLBACK;
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c4 = 'x' WHERE id = 1;
|
||
ROLLBACK;
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 7:
|
||
# Confirm some ADD COLUMN are instant, some are not
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD COLUMN d INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN e INT NOT NULL DEFAULT 100, ADD KEY(e);
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN f INT NOT NULL DEFAULT 100, FORCE;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN g INT NOT NULL DEFAULT 100, ALGORITHM=INPLACE;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`d` int(11) NOT NULL DEFAULT '100',
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`e` int(11) NOT NULL DEFAULT '100',
|
||
`f` int(11) NOT NULL DEFAULT '100',
|
||
`g` int(11) NOT NULL DEFAULT '100',
|
||
PRIMARY KEY (`a`),
|
||
KEY `e` (`e`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c TEXT, FULLTEXT(c)) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1, 'Hello'), (0, 2, 'HELLO'), (0, 3, 'World'), (0, 4, 'Hello world'), (0, 5, 'HELLO WORLD');
|
||
ALTER TABLE t1 ADD COLUMN d INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 8:
|
||
# Check FK constraints on instantly added columns
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
CREATE TABLE t2(a INT NOT NULL PRIMARY KEY, b INT, c INT, KEY(c));
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(1, 2, 3), (2, 3, 4), (3, 4, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 3;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET c = 4 WHERE a = 2;
|
||
UPDATE t1 SET c = 5 WHERE a = 3;
|
||
ALTER TABLE t1 ADD KEY(c);
|
||
ALTER TABLE t2 ADD FOREIGN KEY (c) REFERENCES t1(c) ON UPDATE CASCADE, ALGORITHM = COPY;
|
||
UPDATE t1 SET c = 10 WHERE a = 1;
|
||
SELECT c FROM t2;
|
||
c
|
||
4
|
||
5
|
||
10
|
||
UPDATE t1 SET c = 10;
|
||
SELECT c FROM t2;
|
||
c
|
||
10
|
||
10
|
||
10
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '3',
|
||
PRIMARY KEY (`a`),
|
||
KEY `c` (`c`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t2;
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 9:
|
||
# Instant ADD COLUMN on partitioned table, only simple test here
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC PARTITION BY HASH(a) PARTITIONS 3;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
3 3 5
|
||
6 6 5
|
||
1 1 5
|
||
4 4 5
|
||
7 7 5
|
||
2 2 5
|
||
5 5 5
|
||
8 8 5
|
||
INSERT INTO t1 VALUES(0, 9, 10), (0, 10, 20);
|
||
SELECT * FROM t1 WHERE b > 8;
|
||
a b c
|
||
9 9 10
|
||
10 10 20
|
||
UPDATE t1 SET c = 8 WHERE a = 1 OR a = 3 OR a = 5 OR a = 7;
|
||
SELECT * FROM t1;
|
||
a b c
|
||
3 3 8
|
||
6 6 5
|
||
9 9 10
|
||
1 1 8
|
||
4 4 5
|
||
7 7 8
|
||
10 10 20
|
||
2 2 5
|
||
5 5 8
|
||
8 8 5
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
/*!50100 PARTITION BY HASH (`a`)
|
||
PARTITIONS 3 */
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT, b INT) ROW_FORMAT=DYNAMIC PARTITION BY HASH(a) PARTITIONS 2;;
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 CHANGE COLUMN c c1 INT;
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 10:
|
||
# EXCHANGE PARTITION is not allowed if either is instant
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT NOT NULL DEFAULT 5) ROW_FORMAT=DYNAMIC PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20), PARTITION p3 VALUES LESS THAN (30));;
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
ERROR HY000: Non matching attribute 'INSTANT COLUMN(s)' between partition and table
|
||
ALTER TABLE t2 ADD COLUMN d INT;
|
||
ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=INPLACE;
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
ERROR HY000: Non matching attribute 'INSTANT COLUMN(s)' between partition and table
|
||
OPTIMIZE TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 optimize note Table does not support optimize, doing recreate + analyze instead
|
||
test.t2 optimize status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
`d` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
`d` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
/*!50100 PARTITION BY RANGE (`a`)
|
||
(PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||
PARTITION p2 VALUES LESS THAN (20) ENGINE = InnoDB,
|
||
PARTITION p3 VALUES LESS THAN (30) ENGINE = InnoDB) */
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
DROP TABLE t1, t2;
|
||
#
|
||
# Scenario 11:
|
||
# PRIMARY KEY with more than one column, at least to verify it works with REDUDANT
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY(a, b)) ROW_FORMAT=DYNAMIC;;
|
||
INSERT INTO t1 VALUES(0, 1), (1, 2), (2, 3), (3, 4);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
0 1 5
|
||
1 2 5
|
||
2 3 5
|
||
3 4 5
|
||
UPDATE t1 SET c = b WHERE b <= 2;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
0 1 1
|
||
1 2 2
|
||
2 3 5
|
||
3 4 5
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 12:
|
||
# Mix ALTER PARTITION and ALTER TABLE ... INPLACE. This is to check if first partition is not
|
||
# instant after ALTER PARTITION, will the metadata be copied correctly
|
||
#
|
||
CREATE TABLE t1 (col1 INT, col2 INT, col3 INT, col4 TEXT) ENGINE = InnoDB PARTITION BY RANGE(col1 * 2) ( PARTITION p0 VALUES LESS THAN (128), PARTITION p1 VALUES LESS THAN (256) , PARTITION p2 VALUES LESS THAN (384) , PARTITION p3 VALUES LESS THAN MAXVALUE);;
|
||
INSERT INTO t1 VALUES(1, 2, 3, 'abcdefg'), (100, 200, 300, 'qwerty'), (200, 300, 400, 'asdfg');
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, ADD COLUMN col5 VARCHAR(500), ADD COLUMN col6 TEXT;
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 4` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 4
|
||
4
|
||
ALTER TABLE t1 ALGORITHM INPLACE, REORGANIZE PARTITION p0 INTO (PARTITION p0_a VALUES LESS THAN (64), PARTITION p0_b VALUES LESS THAN (128));
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, ADD KEY idx4(col4(10));
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, LOCK EXCLUSIVE, REORGANIZE PARTITION p0_a, p0_b INTO (PARTITION p0 VALUES LESS THAN (128) TABLESPACE innodb_file_per_table);
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY idx3(col3);
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
col1 col2 col3 col4 col5 col6
|
||
1 2 3 abcdefg NULL NULL
|
||
100 200 300 qwerty NULL NULL
|
||
200 300 400 asdfg NULL NULL
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC PARTITION BY HASH(a) PARTITIONS 3;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
ALTER TABLE t1 ADD PARTITION PARTITIONS 10;
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY(b);
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
1 1 5
|
||
2 2 5
|
||
3 3 5
|
||
4 4 5
|
||
5 5 5
|
||
6 6 5
|
||
7 7 5
|
||
8 8 5
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 13:
|
||
# Create a table with a two level clustered index, do instant ADD COLUMN, then the non-leaf node
|
||
# should be parsed correctly
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, d INT NOT NULL, b BLOB NOT NULL, c VARCHAR(87), INDEX(d), INDEX(a ASC), PRIMARY KEY (a, d DESC, c DESC)) ROW_FORMAT=DYNAMIC PARTITION BY LINEAR KEY(c) PARTITIONS 9;;
|
||
INSERT INTO t1(d, b, c) VALUES(1, 2, 'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(2, 3, 'aaaaaaaaaahhhhhhhhhhbbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(3, 4, 'bbbbbbbbbbaaaaaaaaaahhhhhhhhhhccccccccccddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(4, 5, 'eeeeeeeeeehhhhhhhhhhbbbbbbbbbbccccccccccddddddddddaaaaaaaaaaffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(5, 6, 'aaaaaaaaaahhhhhhhhhhbbbbbbbbbbddddddddddcccccccccceeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(6, 7, 'cccccccccchhhhhhhhhhbbbbbbbbbbaaaaaaaaaaddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
ALTER TABLE t1 ADD COLUMN nc086 BIGINT NOT NULL FIRST, ALGORITHM=INPLACE, LOCK=DEFAULT;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD COLUMN nc082 TINYTEXT;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT COUNT(*) FROM t1;
|
||
COUNT(*)
|
||
384
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 14:
|
||
# Create a small table, and add GIS kinds of new columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 POINT, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, ST_PointFromText('POINT(10 10)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN d1 LINESTRING, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd1' AND has_default = 1;
|
||
name default_value
|
||
d1 NULL
|
||
INSERT INTO t1(a, d1) VALUES(0, ST_LineFromText('LINESTRING(0 0,0 10,10 0)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE d1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN e1 POLYGON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e1' AND has_default = 1;
|
||
name default_value
|
||
e1 NULL
|
||
INSERT INTO t1(a, e1) VALUES(0, ST_PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE e1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN f1 MULTIPOINT, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f1' AND has_default = 1;
|
||
name default_value
|
||
f1 NULL
|
||
INSERT INTO t1(a, f1) VALUES(0, ST_MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE f1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN g1 MULTILINESTRING, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g1' AND has_default = 1;
|
||
name default_value
|
||
g1 NULL
|
||
INSERT INTO t1(a, g1) VALUES(0, ST_MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE g1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN h1 MULTIPOLYGON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h1' AND has_default = 1;
|
||
name default_value
|
||
h1 NULL
|
||
INSERT INTO t1(a, h1) VALUES(0, ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE h1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN i1 GEOMETRYCOLLECTION, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'i1' AND has_default = 1;
|
||
name default_value
|
||
i1 NULL
|
||
INSERT INTO t1(a, i1) VALUES(0, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE i1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN j1 GEOMETRY, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'j1' AND has_default = 1;
|
||
name default_value
|
||
j1 NULL
|
||
INSERT INTO t1(a, j1) VALUES(0, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE j1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` point DEFAULT NULL,
|
||
`d1` linestring DEFAULT NULL,
|
||
`e1` polygon DEFAULT NULL,
|
||
`f1` multipoint DEFAULT NULL,
|
||
`g1` multilinestring DEFAULT NULL,
|
||
`h1` multipolygon DEFAULT NULL,
|
||
`i1` geomcollection DEFAULT NULL,
|
||
`j1` geometry DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 15:
|
||
# Create a small table, and add JSON columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 JSON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, '{"key1": "value1", "key2": "value2"}');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` json DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 16:
|
||
# Create a small table, and add INSTANT columns and verify with trigger
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE TRIGGER t1_ai AFTER INSERT ON t1 FOR EACH ROW
|
||
INSERT INTO t2 VALUES(0,6);
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP TRIGGER t1_ai;
|
||
ALTER TABLE t2 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'cccc', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
c1 63636363
|
||
CREATE TRIGGER t2_ai AFTER INSERT ON t2 FOR EACH ROW
|
||
INSERT INTO t1(a,c1) VALUES(0,'eeee');
|
||
INSERT INTO t2(a, c1) VALUES(0, 'dddd');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='cccc';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'dddd';
|
||
c1
|
||
dddd
|
||
DROP TRIGGER t2_ai;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1,t2;
|
||
#
|
||
# Scenario 17:
|
||
# Create a small table, and add INSTANT columns and verify with storedprocedure
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE PROCEDURE p1() INSERT INTO t1(a,c1) VALUES(0, 'bbbb');
|
||
CALL p1();
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP PROCEDURE p1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 18:
|
||
# Create a small table, and add INSTANT columns and verify with view
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
SELECT * FROM v1;
|
||
a b c1
|
||
1 1 aaaa
|
||
2 2 aaaa
|
||
3 3 aaaa
|
||
4 4 aaaa
|
||
5 5 aaaa
|
||
6 NULL bbbb
|
||
DROP VIEW v1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 19:
|
||
# Create a small table, and add INSTANT columns and drop it and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
ALTER TABLE t1 DROP COLUMN c1;
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 20:
|
||
# Create a small table, and add INSTANT columns and rename table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 RENAME t2;
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t2(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t2;
|
||
#
|
||
# Scenario 21:
|
||
# Create a small table, and add INSTANT columns and change its data type INSTANTly won't work
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
ALTER TABLE t1 CHANGE c1 c2 CHAR(10) NOT NULL DEFAULT 'cccc';
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c2` char(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 22:
|
||
# Create a small table, and add INSTANT columns and create hash,btree multi column index and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE INDEX id1 ON t1(c1) USING BTREE;
|
||
CREATE INDEX id2 ON t1(c1) USING HASH;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
Warning 1831 Duplicate index 'id2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP INDEX id1 ON t1;
|
||
DROP INDEX id2 ON t1;
|
||
ALTER TABLE t1 ADD COLUMN c2 VARCHAR(10) NOT NULL DEFAULT 'cccc', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c2' AND has_default = 1;
|
||
name default_value
|
||
c2 63636363
|
||
CREATE INDEX id1 ON t1(c1 ASC,c2 DESC) USING BTREE;
|
||
INSERT INTO t1(a, c2) VALUES(0, 'dddd');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='cccc';
|
||
count(*) = max(a)
|
||
NULL
|
||
SELECT c1 FROM t1 WHERE c1 = 'dddd';
|
||
c1
|
||
ALTER TABLE t1 RENAME INDEX id1 TO id2;
|
||
DROP INDEX id2 ON t1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
`c2` varchar(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 23:
|
||
# Create a small table, and add INSTANT columns and perform table join operation
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'cccc');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'cccc';
|
||
c1
|
||
cccc
|
||
ALTER TABLE t2 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'bbbb', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
c1 62626262
|
||
INSERT INTO t2(a, c1) VALUES(0, 'cccc');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='bbbb';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'cccc';
|
||
c1
|
||
cccc
|
||
SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1;
|
||
a b c1 a b c1
|
||
6 NULL cccc 6 NULL cccc
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'bbbb',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
DROP TABLE t2;
|
||
#
|
||
# Scenario 24:
|
||
# Create a small table, and add stored and(or) virtual columns
|
||
# after last stored column in the table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT, d INT GENERATED ALWAYS AS (b + c) VIRTUAL, e INT GENERATED ALWAYS AS (b * c) VIRTUAL) ROW_FORMAT=DYNAMIC;
|
||
INSERT INTO t1(a, b, c) VALUES(0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 5), (0, 5, 6);
|
||
ALTER TABLE t1 ADD COLUMN h INT NOT NULL AFTER c;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c, h) VALUES(0, 6, 20, 40);
|
||
SELECT * FROM t1;
|
||
a b c h d e
|
||
1 1 2 0 3 2
|
||
2 2 3 0 5 6
|
||
3 3 4 0 7 12
|
||
4 4 5 0 9 20
|
||
5 5 6 0 11 30
|
||
6 6 20 40 26 120
|
||
ALTER TABLE t1 ADD COLUMN i VARCHAR(100) DEFAULT 'ABCD EFGH' AFTER h, ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(i)) AFTER i;
|
||
Table id did not change
|
||
SELECT 3 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c, h, i) VALUES(0, 20, 30, 50, 'qwerty');
|
||
SELECT * FROM t1;
|
||
a b c h i f d e
|
||
1 1 2 0 ABCD EFGH 9 3 2
|
||
2 2 3 0 ABCD EFGH 9 5 6
|
||
3 3 4 0 ABCD EFGH 9 7 12
|
||
4 4 5 0 ABCD EFGH 9 9 20
|
||
5 5 6 0 ABCD EFGH 9 11 30
|
||
6 6 20 40 ABCD EFGH 9 26 120
|
||
7 20 30 50 qwerty 6 50 600
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) DEFAULT NULL,
|
||
`h` int(11) NOT NULL,
|
||
`i` varchar(100) DEFAULT 'ABCD EFGH',
|
||
`f` int(11) GENERATED ALWAYS AS (length(`i`)) VIRTUAL,
|
||
`d` int(11) GENERATED ALWAYS AS ((`b` + `c`)) VIRTUAL,
|
||
`e` int(11) GENERATED ALWAYS AS ((`b` * `c`)) VIRTUAL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
|
||
DROP TABLE t1;
|
||
############################################
|
||
# Test instant ADD COLUMN for COMPACT format
|
||
############################################
|
||
#
|
||
# Scenario 1:
|
||
# Create a small table, and add all kinds of new columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 INT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 1;
|
||
c1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN c2 INT NOT NULL DEFAULT 10;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c2' AND has_default = 1;
|
||
name default_value
|
||
c2 8000000a
|
||
INSERT INTO t1(a, c2) VALUES(0, 11);
|
||
SELECT count(*) = max(a) FROM t1 WHERE c2 = 10;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c2 FROM t1 WHERE c2 = 11;
|
||
c2
|
||
11
|
||
ALTER TABLE t1 ADD COLUMN d1 BIGINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd1' AND has_default = 1;
|
||
name default_value
|
||
d1 NULL
|
||
INSERT INTO t1(a, d1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE d1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT d1 FROM t1 WHERE d1 = 1;
|
||
d1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN d2 BIGINT NOT NULL DEFAULT 1234567890;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd2' AND has_default = 1;
|
||
name default_value
|
||
d2 80000000499602d2
|
||
INSERT INTO t1(a, d2) VALUES(0, 1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE d2 = 1234567890;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT d2 FROM t1 WHERE d2 = 1234;
|
||
d2
|
||
1234
|
||
ALTER TABLE t1 ADD COLUMN e1 SMALLINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e1' AND has_default = 1;
|
||
name default_value
|
||
e1 NULL
|
||
INSERT INTO t1(a, e1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE e1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT e1 FROM t1 WHERE e1 = 1;
|
||
e1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN e2 SMALLINT NOT NULL DEFAULT 10;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e2' AND has_default = 1;
|
||
name default_value
|
||
e2 800a
|
||
INSERT INTO t1(a, e2) VALUES(0, 11);
|
||
SELECT count(*) = max(a) FROM t1 WHERE e2 = 10;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT e2 FROM t1 WHERE e2 = 11;
|
||
e2
|
||
11
|
||
ALTER TABLE t1 ADD COLUMN f1 TINYINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f1' AND has_default = 1;
|
||
name default_value
|
||
f1 NULL
|
||
INSERT INTO t1(a, f1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE f1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT f1 FROM t1 WHERE f1 = 1;
|
||
f1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN f2 TINYINT NOT NULL DEFAULT 123;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f2' AND has_default = 1;
|
||
name default_value
|
||
f2 fb
|
||
INSERT INTO t1(a, f2) VALUES(0, 12);
|
||
SELECT count(*) = max(a) FROM t1 WHERE f2 = 123;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT f2 FROM t1 WHERE f2 = 12;
|
||
f2
|
||
12
|
||
ALTER TABLE t1 ADD COLUMN g1 MEDIUMINT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g1' AND has_default = 1;
|
||
name default_value
|
||
g1 NULL
|
||
INSERT INTO t1(a, g1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE g1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT g1 FROM t1 WHERE g1 = 1;
|
||
g1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN g2 MEDIUMINT NOT NULL DEFAULT 12345;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g2' AND has_default = 1;
|
||
name default_value
|
||
g2 803039
|
||
INSERT INTO t1(a, g2) VALUES(0, 1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE g2 = 12345;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT g2 FROM t1 WHERE g2 = 1234;
|
||
g2
|
||
1234
|
||
ALTER TABLE t1 ADD COLUMN h1 FLOAT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h1' AND has_default = 1;
|
||
name default_value
|
||
h1 NULL
|
||
INSERT INTO t1(a, h1) VALUES(0, 1.0);
|
||
SELECT count(*) = max(a) FROM t1 WHERE h1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT h1 FROM t1 WHERE h1 = 1;
|
||
h1
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN h2 FLOAT NOT NULL DEFAULT 12.34;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h2' AND has_default = 1;
|
||
name default_value
|
||
h2 a4704541
|
||
INSERT INTO t1(a, h2) VALUES(0, 1.234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE h2 = 12.34;
|
||
count(*) = max(a)
|
||
NULL
|
||
SELECT h2 FROM t1 WHERE h2 = 1.234;
|
||
h2
|
||
ALTER TABLE t1 ADD COLUMN i1 DECIMAL(5, 2), ADD COLUMN i2 double, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'i1' OR name = 'i2') AND has_default = 1;
|
||
name default_value
|
||
i1 NULL
|
||
i2 NULL
|
||
INSERT INTO t1(a, i1, i2) VALUES(0, 10.10, 20.20);
|
||
SELECT count(*) = max(a) FROM t1 WHERE i1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE i2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT i1 FROM t1 WHERE i1 = 10.10;
|
||
i1
|
||
10.10
|
||
SELECT i2 FROM t1 WHERE i2 = 20.20;
|
||
i2
|
||
20.2
|
||
ALTER TABLE t1 ADD COLUMN j1 DECIMAL(5, 2) NOT NULL DEFAULT 100.00, ADD COLUMN j2 double NOT NULL DEFAULT 1000.5678;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'j1' OR name = 'j2') AND has_default = 1;
|
||
name default_value
|
||
j1 806400
|
||
j2 5af5b9da8a448f40
|
||
INSERT INTO t1(a, j1, j2) VALUES(0, 90.90, 1000.1234);
|
||
SELECT count(*) = max(a) FROM t1 WHERE j1 = 100.00;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE j2 = 1000.5678;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT j1 FROM t1 WHERE j1 = 90.90;
|
||
j1
|
||
90.90
|
||
SELECT j2 FROM t1 WHERE j2 = 1000.1234;
|
||
j2
|
||
1000.1234
|
||
ALTER TABLE t1 ADD COLUMN k1 BIT(8), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'k1' AND has_default = 1;
|
||
name default_value
|
||
k1 NULL
|
||
INSERT INTO t1(a, k1) VALUES(0, b'010101');
|
||
SELECT count(*) = max(a) FROM t1 WHERE k1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(k1) FROM t1 WHERE k1 = b'010101';
|
||
hex(k1)
|
||
15
|
||
ALTER TABLE t1 ADD COLUMN k2 BIT(8) NOT NULL DEFAULT b'101010';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'k2' AND has_default = 1;
|
||
name default_value
|
||
k2 2a
|
||
INSERT INTO t1(a, k2) VALUES(0, b'110011');
|
||
SELECT count(*) = max(a) FROM t1 WHERE k2 = b'101010';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(k2) FROM t1 WHERE k2 = b'110011';
|
||
hex(k2)
|
||
33
|
||
ALTER TABLE t1 ADD COLUMN l1 CHAR(50), ADD COLUMN l2 VARCHAR(100), ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'l1' OR name = 'l2') AND has_default = 1;
|
||
name default_value
|
||
l1 NULL
|
||
l2 NULL
|
||
INSERT INTO t1(a, l1, l2) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn ');
|
||
SELECT count(*) = max(a) FROM t1 WHERE l2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE l1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT l1 FROM t1 WHERE l1 = 'ABCD EFGH';
|
||
l1
|
||
ABCD EFGH
|
||
SELECT l2 FROM t1 WHERE l2 = 'abcdefg hijklmn ';
|
||
l2
|
||
abcdefg hijklmn
|
||
ALTER TABLE t1 ADD COLUMN m1 CHAR(50) default 'The fox jumps over', ADD COLUMN m2 VARCHAR(50) DEFAULT 'The fox jumps over the lazy dog.';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'm1' OR name = 'm2') AND has_default = 1;
|
||
name default_value
|
||
m1 54686520666f78206a756d7073206f7665722020202020202020202020202020202020202020202020202020202020202020
|
||
m2 54686520666f78206a756d7073206f76657220746865206c617a7920646f672e
|
||
INSERT INTO t1(a, m1, m2) VALUES(0, 'over the lazy dog', 'The lazy dog jumps over the fox.');
|
||
SELECT count(*) = max(a) FROM t1 WHERE m1 = 'The fox jumps over';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE m2 like 'The fox jumps%';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT m1 FROM t1 WHERE m1 = 'over the lazy dog';
|
||
m1
|
||
over the lazy dog
|
||
SELECT m2 FROM t1 WHERE m2 like '%the fox.';
|
||
m2
|
||
The lazy dog jumps over the fox.
|
||
ALTER TABLE t1 ADD COLUMN n1 BINARY(10), ADD COLUMN n2 VARBINARY(10), ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'n1' OR name = 'n2') AND has_default = 1;
|
||
name default_value
|
||
n1 NULL
|
||
n2 NULL
|
||
INSERT INTO t1(a, n1, n2) VALUES(0, 0x010203040506070809, 0x102030405060708090);
|
||
SELECT count(*) = max(a) FROM t1 WHERE n1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE n2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(n1) FROM t1 WHERE n1 = 0x01020304050607080900;
|
||
hex(n1)
|
||
01020304050607080900
|
||
SELECT hex(n2) FROM t1 WHERE n2 = 0x102030405060708090;
|
||
hex(n2)
|
||
102030405060708090
|
||
ALTER TABLE t1 ADD COLUMN o1 BINARY(10) DEFAULT 0x11223344, ADD COLUMN o2 VARBINARY(10) DEFAULT 0x55667788;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'o1' OR name = 'o2') AND has_default = 1;
|
||
name default_value
|
||
o1 11223344000000000000
|
||
o2 55667788
|
||
INSERT INTO t1(a, o1, o2) VALUES(0, 0x44332211, 0x88776655);
|
||
SELECT count(*) = max(a) FROM t1 WHERE o1 = 0x11223344000000000000;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE o2 = 0x55667788;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(o1) FROM t1 WHERE o1 = 0x44332211000000000000;
|
||
hex(o1)
|
||
44332211000000000000
|
||
SELECT hex(o2) FROM t1 WHERE o2 = 0x88776655;
|
||
hex(o2)
|
||
88776655
|
||
ALTER TABLE t1 ADD COLUMN p1 DATETIME, ALGORITHM=DEFAULT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'p1' AND has_default = 1;
|
||
name default_value
|
||
p1 NULL
|
||
INSERT INTO t1(a, p1) VALUES(0, '2017-12-31 00:00:00');
|
||
SELECT count(*) = max(a) FROM t1 WHERE p1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT p1 FROM t1 WHERE p1 = '2017-12-31 00:00:00';
|
||
p1
|
||
2017-12-31 00:00:00
|
||
ALTER TABLE t1 ADD COLUMN p2 DATETIME NOT NULL DEFAULT '2017-12-31 01:02:03';
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'p2' AND has_default = 1;
|
||
name default_value
|
||
p2 999e7e1083
|
||
SELECT count(*) = max(a) FROM t1 GROUP BY p2;
|
||
count(*) = max(a)
|
||
1
|
||
INSERT INTO t1(a, p2) VALUES(0, now());
|
||
SELECT count(*) FROM t1 GROUP BY p2;
|
||
count(*)
|
||
26
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN q1 ENUM ('value1','value2','value3'), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'q1' AND has_default = 1;
|
||
name default_value
|
||
q1 NULL
|
||
INSERT INTO t1(a, q1) VALUES(0, 1);
|
||
SELECT count(*) = max(a) FROM t1 WHERE q1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT q1 FROM t1 WHERE q1 = 1;
|
||
q1
|
||
value1
|
||
ALTER TABLE t1 ADD COLUMN r1 SET ('a','b','c'), ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'r1' AND has_default = 1;
|
||
name default_value
|
||
r1 NULL
|
||
INSERT INTO t1(a, r1) VALUES(0, 'a');
|
||
SELECT count(*) = max(a) FROM t1 WHERE r1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT r1 FROM t1 WHERE r1 = 'a';
|
||
r1
|
||
a
|
||
ALTER TABLE t1 ADD COLUMN s1 BLOB, ADD COLUMN s2 TEXT, ALGORITHM=INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 's1' OR name = 's2') AND has_default = 1;
|
||
name default_value
|
||
s1 NULL
|
||
s2 NULL
|
||
INSERT INTO t1(a, s1, s2) VALUES(0, 0x0102030405, 'abcd qwerty');
|
||
SELECT count(*) = max(a) FROM t1 WHERE s1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE s2 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(s1) FROM t1 WHERE s1 = 0x0102030405;
|
||
hex(s1)
|
||
0102030405
|
||
SELECT s2 FROM t1 WHERE s2 = 'abcd qwerty';
|
||
s2
|
||
abcd qwerty
|
||
ALTER TABLE t1 ADD COLUMN u1 BLOB NOT NULL, ADD COLUMN u2 TEXT NOT NULL;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE (name = 'u1' OR name = 'u2') AND has_default = 1;
|
||
name default_value
|
||
u1
|
||
u2
|
||
INSERT INTO t1(a, u1, u2) VALUES(0, 0x0102030405, 'abcd qwerty');
|
||
SELECT count(*) = max(a) FROM t1 WHERE u1 = '';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT count(*) = max(a) FROM t1 WHERE u2 = '';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT hex(u1) FROM t1 WHERE u1 = 0x0102030405;
|
||
hex(u1)
|
||
0102030405
|
||
SELECT u2 FROM t1 WHERE u2 = 'abcd qwerty';
|
||
u2
|
||
abcd qwerty
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` int(11) DEFAULT NULL,
|
||
`c2` int(11) NOT NULL DEFAULT '10',
|
||
`d1` bigint(20) DEFAULT NULL,
|
||
`d2` bigint(20) NOT NULL DEFAULT '1234567890',
|
||
`e1` smallint(6) DEFAULT NULL,
|
||
`e2` smallint(6) NOT NULL DEFAULT '10',
|
||
`f1` tinyint(4) DEFAULT NULL,
|
||
`f2` tinyint(4) NOT NULL DEFAULT '123',
|
||
`g1` mediumint(9) DEFAULT NULL,
|
||
`g2` mediumint(9) NOT NULL DEFAULT '12345',
|
||
`h1` float DEFAULT NULL,
|
||
`h2` float NOT NULL DEFAULT '12.34',
|
||
`i1` decimal(5,2) DEFAULT NULL,
|
||
`i2` double DEFAULT NULL,
|
||
`j1` decimal(5,2) NOT NULL DEFAULT '100.00',
|
||
`j2` double NOT NULL DEFAULT '1000.5678',
|
||
`k1` bit(8) DEFAULT NULL,
|
||
`k2` bit(8) NOT NULL DEFAULT b'101010',
|
||
`l1` char(50) DEFAULT NULL,
|
||
`l2` varchar(100) DEFAULT NULL,
|
||
`m1` char(50) DEFAULT 'The fox jumps over',
|
||
`m2` varchar(50) DEFAULT 'The fox jumps over the lazy dog.',
|
||
`n1` binary(10) DEFAULT NULL,
|
||
`n2` varbinary(10) DEFAULT NULL,
|
||
`o1` binary(10) DEFAULT '"3D\0\0\0\0\0\0',
|
||
`o2` varbinary(10) DEFAULT 'Ufw?',
|
||
`p1` datetime DEFAULT NULL,
|
||
`p2` datetime NOT NULL DEFAULT '2017-12-31 01:02:03',
|
||
`q1` enum('value1','value2','value3') DEFAULT NULL,
|
||
`r1` set('a','b','c') DEFAULT NULL,
|
||
`s1` blob,
|
||
`s2` text,
|
||
`u1` blob NOT NULL,
|
||
`u2` text NOT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 2:
|
||
# Create a small table, add some columns instantly, along with
|
||
# virtual columns
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL, ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c) VALUES(0, 6, 20);
|
||
SELECT * FROM t1;
|
||
a b c d
|
||
1 1 0 2
|
||
2 2 0 4
|
||
3 3 0 6
|
||
4 4 0 8
|
||
5 5 0 10
|
||
6 6 20 12
|
||
ALTER TABLE t1 ADD COLUMN e VARCHAR(100) DEFAULT 'ABCD EFGH', ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(e));
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, c, e) VALUES(0, 20, 'Hello'), (0, 20, 'World'), (0, 20, 'Hello World');
|
||
SELECT * FROM t1;
|
||
a b c d e f
|
||
1 1 0 2 ABCD EFGH 9
|
||
2 2 0 4 ABCD EFGH 9
|
||
3 3 0 6 ABCD EFGH 9
|
||
4 4 0 8 ABCD EFGH 9
|
||
5 5 0 10 ABCD EFGH 9
|
||
6 6 20 12 ABCD EFGH 9
|
||
7 NULL 20 NULL Hello 5
|
||
8 NULL 20 NULL World 5
|
||
9 NULL 20 NULL Hello World 11
|
||
ALTER TABLE t1 ADD COLUMN g VARCHAR(100) GENERATED ALWAYS AS (e), ADD COLUMN h BIGINT DEFAULT 10000, ADD COLUMN i BIGINT GENERATED ALWAYS AS (h * 2 + b);
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c d e f g h i
|
||
1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001
|
||
2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002
|
||
3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003
|
||
4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004
|
||
5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005
|
||
6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006
|
||
7 NULL 20 NULL Hello 5 Hello 10000 NULL
|
||
8 NULL 20 NULL World 5 World 10000 NULL
|
||
9 NULL 20 NULL Hello World 11 Hello World 10000 NULL
|
||
INSERT INTO t1(a, b, c, h) VALUES(0, 7, 40, 2000), (0, 7, 40, 20000);
|
||
SELECT * FROM t1;
|
||
a b c d e f g h i
|
||
1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001
|
||
2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002
|
||
3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003
|
||
4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004
|
||
5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005
|
||
6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006
|
||
7 NULL 20 NULL Hello 5 Hello 10000 NULL
|
||
8 NULL 20 NULL World 5 World 10000 NULL
|
||
9 NULL 20 NULL Hello World 11 Hello World 10000 NULL
|
||
10 7 40 14 ABCD EFGH 9 ABCD EFGH 2000 4007
|
||
11 7 40 14 ABCD EFGH 9 ABCD EFGH 20000 40007
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL,
|
||
`d` int(11) GENERATED ALWAYS AS ((`b` * 2)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'ABCD EFGH',
|
||
`f` int(11) GENERATED ALWAYS AS (length(`e`)) VIRTUAL,
|
||
`g` varchar(100) GENERATED ALWAYS AS (`e`) VIRTUAL,
|
||
`h` bigint(20) DEFAULT '10000',
|
||
`i` bigint(20) GENERATED ALWAYS AS (((`h` * 2) + `b`)) VIRTUAL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 3:
|
||
# Create a small table, add some columns instantly, then change
|
||
# their default values, check original default values are correct
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
INSERT INTO t1(a, b, c, e) VALUES(0, 6, 200, 'Good day'), (0, 7, 300, 'Good DAY');
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'c' AND has_default = 1;
|
||
default_value
|
||
80000064
|
||
ALTER TABLE t1 ALTER COLUMN c SET DEFAULT 500;
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'c' AND
|
||
has_default = 1;
|
||
default_value
|
||
80000064
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
INSERT INTO t1(a, b) VALUES(0, 8), (0, 9);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'e' AND has_default = 1;
|
||
default_value
|
||
48656c6c6f20776f726c64
|
||
ALTER TABLE t1 ALTER COLUMN e SET DEFAULT 'HELLO MySQL!';
|
||
SELECT default_value FROM information_schema.innodb_columns WHERE name = 'e' AND has_default = 1;
|
||
default_value
|
||
48656c6c6f20776f726c64
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
INSERT INTO t1(a, b) VALUES(0, 10), (0, 20);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 200 406 Good day
|
||
7 7 300 607 Good DAY
|
||
8 8 500 1008 Hello world
|
||
9 9 500 1009 Hello world
|
||
10 10 500 1010 HELLO MySQL!
|
||
11 20 500 1020 HELLO MySQL!
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '500',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'HELLO MySQL!',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 4:
|
||
# Create a small table, add some columns instantly, then do DML
|
||
# on the table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET c = 200 WHERE a > 3;
|
||
SELECT distinct(c) FROM t1;
|
||
c
|
||
100
|
||
200
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
DELETE FROM t1 WHERE c = 100;
|
||
UPDATE t1 SET c = 300;
|
||
SELECT distinct(c) FROM t1;
|
||
c
|
||
300
|
||
SELECT count(*) FROM t1;
|
||
count(*)
|
||
16
|
||
ALTER TABLE t1 ADD COLUMN t DATETIME DEFAULT CURRENT_TIMESTAMP;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET e = 'Hello MySQL' WHERE a > 10;
|
||
UPDATE t1 SET e = 'Hello MySQL!!' WHERE a > 20;
|
||
SELECT distinct(e) FROM t1;
|
||
e
|
||
Hello world
|
||
Hello MySQL
|
||
Hello MySQL!!
|
||
UPDATE t1 SET c = 500 WHERE e LIKE '%world%';
|
||
SELECT c, e FROM t1 GROUP BY c, e;
|
||
c e
|
||
500 Hello world
|
||
300 Hello MySQL
|
||
300 Hello MySQL!!
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
UPDATE t1 SET t = CURRENT_TIMESTAMP WHERE a < 50;
|
||
SELECT count(t) FROM t1 GROUP BY t;
|
||
count(t)
|
||
16
|
||
16
|
||
DELETE FROM t1 WHERE a < 50;
|
||
SELECT count(t) FROM t1 GROUP BY t;
|
||
count(t)
|
||
16
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
`t` datetime DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 5:
|
||
# Create a small table, add some columns instantly, then do DDL
|
||
# to build indexes
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY(c);
|
||
EXPLAIN SELECT c FROM t1;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index NULL c # NULL # 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`c` AS `c` from `test`.`t1`
|
||
SELECT c FROM t1 WHERE c != 100;
|
||
c
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1;
|
||
UPDATE t1 SET e = 'Hello MySQL' WHERE a > 30;
|
||
ALTER TABLE t1 ADD KEY(e);
|
||
EXPLAIN SELECT e FROM t1;
|
||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE t1 NULL index NULL e # NULL # 100.00 Using index
|
||
Warnings:
|
||
Note 1003 /* select#1 */ select `test`.`t1`.`e` AS `e` from `test`.`t1`
|
||
SELECT count(e) FROM t1 WHERE e LIKE '%MySQL%';
|
||
count(e)
|
||
17
|
||
SELECT count(e) FROM t1 WHERE e LIKE '%world%';
|
||
count(e)
|
||
23
|
||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a, c);
|
||
SELECT a, c, e FROM t1 WHERE a > 25 AND a < 40;
|
||
a c e
|
||
28 100 Hello world
|
||
29 100 Hello world
|
||
30 100 Hello world
|
||
31 100 Hello MySQL
|
||
32 100 Hello MySQL
|
||
33 100 Hello MySQL
|
||
34 100 Hello MySQL
|
||
35 100 Hello MySQL
|
||
36 100 Hello MySQL
|
||
37 100 Hello MySQL
|
||
38 100 Hello MySQL
|
||
39 100 Hello MySQL
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
PRIMARY KEY (`a`,`c`),
|
||
KEY `c` (`c`),
|
||
KEY `e` (`e`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 6:
|
||
# Create a small table, add some columns instantly, then do DML
|
||
# on the table, and some simple rollback
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world';
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
START TRANSACTION;
|
||
INSERT INTO t1(a, b) VALUES(0, 6);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
6 6 100 206 Hello world
|
||
ROLLBACK;
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c = 500 WHERE a = 1;
|
||
UPDATE t1 SET b = 1000 WHERE a = 2;
|
||
SELECT a, b, c FROM t1 WHERE a = 1 OR a = 2;
|
||
a b c
|
||
1 1 500
|
||
2 1000 100
|
||
ROLLBACK;
|
||
SELECT a, b, c FROM t1;
|
||
a b c
|
||
1 1 100
|
||
2 2 100
|
||
3 3 100
|
||
4 4 100
|
||
5 5 100
|
||
START TRANSACTION;
|
||
DELETE FROM t1 WHERE a < 5;
|
||
INSERT INTO t1(a, b) VALUES(0, 6);
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
5 5 100 205 Hello world
|
||
7 6 100 206 Hello world
|
||
ROLLBACK;
|
||
SELECT * FROM t1;
|
||
a b c d e
|
||
1 1 100 201 Hello world
|
||
2 2 100 202 Hello world
|
||
3 3 100 203 Hello world
|
||
4 4 100 204 Hello world
|
||
5 5 100 205 Hello world
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`d` int(11) GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL,
|
||
`e` varchar(100) DEFAULT 'Hello world',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1(id INT PRIMARY KEY, c1 VARCHAR(4000), c2 VARCHAR(4000), c3 VARCHAR(1000)) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(1, repeat('a', 4000), repeat('b', 4000), repeat('c', 1));
|
||
SELECT id, length(c1), length(c2), length(c3) FROM t1;
|
||
id length(c1) length(c2) length(c3)
|
||
1 4000 4000 1
|
||
ALTER TABLE t1 ADD COLUMN c4 VARCHAR(500) NOT NULL DEFAULT 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd';
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c1 = repeat('x', 200) WHERE id = 1;
|
||
ROLLBACK;
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
START TRANSACTION;
|
||
UPDATE t1 SET c4 = 'x' WHERE id = 1;
|
||
ROLLBACK;
|
||
SELECT id, length(c1), length(c2), length(c3), length(c4) FROM t1;
|
||
id length(c1) length(c2) length(c3) length(c4)
|
||
1 4000 4000 1 500
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 7:
|
||
# Confirm some ADD COLUMN are instant, some are not
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD COLUMN d INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN e INT NOT NULL DEFAULT 100, ADD KEY(e);
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN f INT NOT NULL DEFAULT 100, FORCE;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
ALTER TABLE t1 ADD COLUMN g INT NOT NULL DEFAULT 100, ALGORITHM=INPLACE;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_columns WHERE has_default = 1;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`d` int(11) NOT NULL DEFAULT '100',
|
||
`c` int(11) NOT NULL DEFAULT '100',
|
||
`e` int(11) NOT NULL DEFAULT '100',
|
||
`f` int(11) NOT NULL DEFAULT '100',
|
||
`g` int(11) NOT NULL DEFAULT '100',
|
||
PRIMARY KEY (`a`),
|
||
KEY `e` (`e`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c TEXT, FULLTEXT(c)) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1, 'Hello'), (0, 2, 'HELLO'), (0, 3, 'World'), (0, 4, 'Hello world'), (0, 5, 'HELLO WORLD');
|
||
ALTER TABLE t1 ADD COLUMN d INT NOT NULL DEFAULT 100 AFTER b;
|
||
Table ID differed
|
||
count(*) = 1
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 8:
|
||
# Check FK constraints on instantly added columns
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
CREATE TABLE t2(a INT NOT NULL PRIMARY KEY, b INT, c INT, KEY(c));
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(1, 2, 3), (2, 3, 4), (3, 4, 5);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 3;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
UPDATE t1 SET c = 4 WHERE a = 2;
|
||
UPDATE t1 SET c = 5 WHERE a = 3;
|
||
ALTER TABLE t1 ADD KEY(c);
|
||
ALTER TABLE t2 ADD FOREIGN KEY (c) REFERENCES t1(c) ON UPDATE CASCADE, ALGORITHM = COPY;
|
||
UPDATE t1 SET c = 10 WHERE a = 1;
|
||
SELECT c FROM t2;
|
||
c
|
||
4
|
||
5
|
||
10
|
||
UPDATE t1 SET c = 10;
|
||
SELECT c FROM t2;
|
||
c
|
||
10
|
||
10
|
||
10
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '3',
|
||
PRIMARY KEY (`a`),
|
||
KEY `c` (`c`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t2;
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 9:
|
||
# Instant ADD COLUMN on partitioned table, only simple test here
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT PARTITION BY HASH(a) PARTITIONS 3;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
3 3 5
|
||
6 6 5
|
||
1 1 5
|
||
4 4 5
|
||
7 7 5
|
||
2 2 5
|
||
5 5 5
|
||
8 8 5
|
||
INSERT INTO t1 VALUES(0, 9, 10), (0, 10, 20);
|
||
SELECT * FROM t1 WHERE b > 8;
|
||
a b c
|
||
9 9 10
|
||
10 10 20
|
||
UPDATE t1 SET c = 8 WHERE a = 1 OR a = 3 OR a = 5 OR a = 7;
|
||
SELECT * FROM t1;
|
||
a b c
|
||
3 3 8
|
||
6 6 5
|
||
9 9 10
|
||
1 1 8
|
||
4 4 5
|
||
7 7 8
|
||
10 10 20
|
||
2 2 5
|
||
5 5 8
|
||
8 8 5
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
/*!50100 PARTITION BY HASH (`a`)
|
||
PARTITIONS 3 */
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT, b INT) ROW_FORMAT=COMPACT PARTITION BY HASH(a) PARTITIONS 2;;
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 CHANGE COLUMN c c1 INT;
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 10:
|
||
# EXCHANGE PARTITION is not allowed if either is instant
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT NOT NULL DEFAULT 5) ROW_FORMAT=COMPACT PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20), PARTITION p3 VALUES LESS THAN (30));;
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
ERROR HY000: Non matching attribute 'INSTANT COLUMN(s)' between partition and table
|
||
ALTER TABLE t2 ADD COLUMN d INT;
|
||
ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=INPLACE;
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
ERROR HY000: Non matching attribute 'INSTANT COLUMN(s)' between partition and table
|
||
OPTIMIZE TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 optimize note Table does not support optimize, doing recreate + analyze instead
|
||
test.t2 optimize status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
`d` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) NOT NULL DEFAULT '5',
|
||
`d` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
/*!50100 PARTITION BY RANGE (`a`)
|
||
(PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||
PARTITION p2 VALUES LESS THAN (20) ENGINE = InnoDB,
|
||
PARTITION p3 VALUES LESS THAN (30) ENGINE = InnoDB) */
|
||
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1;
|
||
DROP TABLE t1, t2;
|
||
#
|
||
# Scenario 11:
|
||
# PRIMARY KEY with more than one column, at least to verify it works with REDUDANT
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY(a, b)) ROW_FORMAT=COMPACT;;
|
||
INSERT INTO t1 VALUES(0, 1), (1, 2), (2, 3), (3, 4);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
0 1 5
|
||
1 2 5
|
||
2 3 5
|
||
3 4 5
|
||
UPDATE t1 SET c = b WHERE b <= 2;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
0 1 1
|
||
1 2 2
|
||
2 3 5
|
||
3 4 5
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 12:
|
||
# Mix ALTER PARTITION and ALTER TABLE ... INPLACE. This is to check if first partition is not
|
||
# instant after ALTER PARTITION, will the metadata be copied correctly
|
||
#
|
||
CREATE TABLE t1 (col1 INT, col2 INT, col3 INT, col4 TEXT) ENGINE = InnoDB PARTITION BY RANGE(col1 * 2) ( PARTITION p0 VALUES LESS THAN (128), PARTITION p1 VALUES LESS THAN (256) , PARTITION p2 VALUES LESS THAN (384) , PARTITION p3 VALUES LESS THAN MAXVALUE);;
|
||
INSERT INTO t1 VALUES(1, 2, 3, 'abcdefg'), (100, 200, 300, 'qwerty'), (200, 300, 400, 'asdfg');
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, ADD COLUMN col5 VARCHAR(500), ADD COLUMN col6 TEXT;
|
||
Table id did not change
|
||
count(*) = 2
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 4` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 4
|
||
4
|
||
ALTER TABLE t1 ALGORITHM INPLACE, REORGANIZE PARTITION p0 INTO (PARTITION p0_a VALUES LESS THAN (64), PARTITION p0_b VALUES LESS THAN (128));
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, ADD KEY idx4(col4(10));
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ALGORITHM DEFAULT, LOCK EXCLUSIVE, REORGANIZE PARTITION p0_a, p0_b INTO (PARTITION p0 VALUES LESS THAN (128) TABLESPACE innodb_file_per_table);
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY idx3(col3);
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
col1 col2 col3 col4 col5 col6
|
||
1 2 3 abcdefg NULL NULL
|
||
100 200 300 qwerty NULL NULL
|
||
200 300 400 asdfg NULL NULL
|
||
DROP TABLE t1;
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT PARTITION BY HASH(a) PARTITIONS 3;;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8);
|
||
ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 5;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT count(*) AS `Expect 3` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 3
|
||
3
|
||
ALTER TABLE t1 ADD PARTITION PARTITIONS 10;
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD KEY(b);
|
||
SELECT count(*) AS `Expect 0` FROM information_schema.innodb_tables WHERE instant_cols != 0;
|
||
Expect 0
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT * FROM t1;
|
||
a b c
|
||
1 1 5
|
||
2 2 5
|
||
3 3 5
|
||
4 4 5
|
||
5 5 5
|
||
6 6 5
|
||
7 7 5
|
||
8 8 5
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 13:
|
||
# Create a table with a two level clustered index, do instant ADD COLUMN, then the non-leaf node
|
||
# should be parsed correctly
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, d INT NOT NULL, b BLOB NOT NULL, c VARCHAR(87), INDEX(d), INDEX(a ASC), PRIMARY KEY (a, d DESC, c DESC)) ROW_FORMAT=COMPACT PARTITION BY LINEAR KEY(c) PARTITIONS 9;;
|
||
INSERT INTO t1(d, b, c) VALUES(1, 2, 'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(2, 3, 'aaaaaaaaaahhhhhhhhhhbbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(3, 4, 'bbbbbbbbbbaaaaaaaaaahhhhhhhhhhccccccccccddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(4, 5, 'eeeeeeeeeehhhhhhhhhhbbbbbbbbbbccccccccccddddddddddaaaaaaaaaaffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(5, 6, 'aaaaaaaaaahhhhhhhhhhbbbbbbbbbbddddddddddcccccccccceeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) VALUES(6, 7, 'cccccccccchhhhhhhhhhbbbbbbbbbbaaaaaaaaaaddddddddddeeeeeeeeeeffffffffffggggggggggjjjjjjj');
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
INSERT INTO t1(d, b, c) SELECT d, b, c FROM t1;
|
||
ALTER TABLE t1 ADD COLUMN nc086 BIGINT NOT NULL FIRST, ALGORITHM=INPLACE, LOCK=DEFAULT;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 ADD COLUMN nc082 TINYTEXT;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT COUNT(*) FROM t1;
|
||
COUNT(*)
|
||
384
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 14:
|
||
# Create a small table, and add GIS kinds of new columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 POINT, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, ST_PointFromText('POINT(10 10)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN d1 LINESTRING, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'd1' AND has_default = 1;
|
||
name default_value
|
||
d1 NULL
|
||
INSERT INTO t1(a, d1) VALUES(0, ST_LineFromText('LINESTRING(0 0,0 10,10 0)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE d1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN e1 POLYGON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'e1' AND has_default = 1;
|
||
name default_value
|
||
e1 NULL
|
||
INSERT INTO t1(a, e1) VALUES(0, ST_PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE e1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN f1 MULTIPOINT, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'f1' AND has_default = 1;
|
||
name default_value
|
||
f1 NULL
|
||
INSERT INTO t1(a, f1) VALUES(0, ST_MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE f1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN g1 MULTILINESTRING, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'g1' AND has_default = 1;
|
||
name default_value
|
||
g1 NULL
|
||
INSERT INTO t1(a, g1) VALUES(0, ST_MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE g1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN h1 MULTIPOLYGON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'h1' AND has_default = 1;
|
||
name default_value
|
||
h1 NULL
|
||
INSERT INTO t1(a, h1) VALUES(0, ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE h1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN i1 GEOMETRYCOLLECTION, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'i1' AND has_default = 1;
|
||
name default_value
|
||
i1 NULL
|
||
INSERT INTO t1(a, i1) VALUES(0, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE i1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
ALTER TABLE t1 ADD COLUMN j1 GEOMETRY, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'j1' AND has_default = 1;
|
||
name default_value
|
||
j1 NULL
|
||
INSERT INTO t1(a, j1) VALUES(0, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||
SELECT count(*) = max(a) FROM t1 WHERE j1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` point DEFAULT NULL,
|
||
`d1` linestring DEFAULT NULL,
|
||
`e1` polygon DEFAULT NULL,
|
||
`f1` multipoint DEFAULT NULL,
|
||
`g1` multilinestring DEFAULT NULL,
|
||
`h1` multipolygon DEFAULT NULL,
|
||
`i1` geomcollection DEFAULT NULL,
|
||
`j1` geometry DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 15:
|
||
# Create a small table, and add JSON columns and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 JSON, ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 NULL
|
||
INSERT INTO t1(a, c1) VALUES(0, '{"key1": "value1", "key2": "value2"}');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1 IS NULL;
|
||
count(*) = max(a)
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` json DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 16:
|
||
# Create a small table, and add INSTANT columns and verify with trigger
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE TRIGGER t1_ai AFTER INSERT ON t1 FOR EACH ROW
|
||
INSERT INTO t2 VALUES(0,6);
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP TRIGGER t1_ai;
|
||
ALTER TABLE t2 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'cccc', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
c1 63636363
|
||
CREATE TRIGGER t2_ai AFTER INSERT ON t2 FOR EACH ROW
|
||
INSERT INTO t1(a,c1) VALUES(0,'eeee');
|
||
INSERT INTO t2(a, c1) VALUES(0, 'dddd');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='cccc';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'dddd';
|
||
c1
|
||
dddd
|
||
DROP TRIGGER t2_ai;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1,t2;
|
||
#
|
||
# Scenario 17:
|
||
# Create a small table, and add INSTANT columns and verify with storedprocedure
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE PROCEDURE p1() INSERT INTO t1(a,c1) VALUES(0, 'bbbb');
|
||
CALL p1();
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP PROCEDURE p1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 18:
|
||
# Create a small table, and add INSTANT columns and verify with view
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
SELECT * FROM v1;
|
||
a b c1
|
||
1 1 aaaa
|
||
2 2 aaaa
|
||
3 3 aaaa
|
||
4 4 aaaa
|
||
5 5 aaaa
|
||
6 NULL bbbb
|
||
DROP VIEW v1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 19:
|
||
# Create a small table, and add INSTANT columns and drop it and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
ALTER TABLE t1 DROP COLUMN c1;
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 20:
|
||
# Create a small table, and add INSTANT columns and rename table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
ALTER TABLE t1 RENAME t2;
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t2(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t2;
|
||
#
|
||
# Scenario 21:
|
||
# Create a small table, and add INSTANT columns and change its data type INSTANTly won't work
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
ALTER TABLE t1 CHANGE c1 c2 CHAR(10) NOT NULL DEFAULT 'cccc';
|
||
Table ID differed
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
0
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c2` char(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 22:
|
||
# Create a small table, and add INSTANT columns and create hash,btree multi column index and verify
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
CREATE INDEX id1 ON t1(c1) USING BTREE;
|
||
CREATE INDEX id2 ON t1(c1) USING HASH;
|
||
Warnings:
|
||
Note 3502 This storage engine does not support the HASH index algorithm, storage engine default was used instead.
|
||
Warning 1831 Duplicate index 'id2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||
INSERT INTO t1(a, c1) VALUES(0, 'bbbb');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'bbbb';
|
||
c1
|
||
bbbb
|
||
DROP INDEX id1 ON t1;
|
||
DROP INDEX id2 ON t1;
|
||
ALTER TABLE t1 ADD COLUMN c2 VARCHAR(10) NOT NULL DEFAULT 'cccc', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c2' AND has_default = 1;
|
||
name default_value
|
||
c2 63636363
|
||
CREATE INDEX id1 ON t1(c1 ASC,c2 DESC) USING BTREE;
|
||
INSERT INTO t1(a, c2) VALUES(0, 'dddd');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='cccc';
|
||
count(*) = max(a)
|
||
NULL
|
||
SELECT c1 FROM t1 WHERE c1 = 'dddd';
|
||
c1
|
||
ALTER TABLE t1 RENAME INDEX id1 TO id2;
|
||
DROP INDEX id2 ON t1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
`c2` varchar(10) NOT NULL DEFAULT 'cccc',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Scenario 23:
|
||
# Create a small table, and add INSTANT columns and perform table join operation
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
INSERT INTO t2 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5);
|
||
ALTER TABLE t1 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'aaaa', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
INSERT INTO t1(a, c1) VALUES(0, 'cccc');
|
||
SELECT count(*) = max(a) FROM t1 WHERE c1='aaaa';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t1 WHERE c1 = 'cccc';
|
||
c1
|
||
cccc
|
||
ALTER TABLE t2 ADD COLUMN c1 VARCHAR(10) NOT NULL DEFAULT 'bbbb', ALGORITHM = INSTANT;
|
||
Table id did not change
|
||
SELECT 2 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SELECT name, default_value FROM information_schema.innodb_columns WHERE name = 'c1' AND has_default = 1;
|
||
name default_value
|
||
c1 61616161
|
||
c1 62626262
|
||
INSERT INTO t2(a, c1) VALUES(0, 'cccc');
|
||
SELECT count(*) = max(a) FROM t2 WHERE c1='bbbb';
|
||
count(*) = max(a)
|
||
1
|
||
SELECT c1 FROM t2 WHERE c1 = 'cccc';
|
||
c1
|
||
cccc
|
||
SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1;
|
||
a b c1 a b c1
|
||
6 NULL cccc 6 NULL cccc
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
CHECK TABLE t2;
|
||
Table Op Msg_type Msg_text
|
||
test.t2 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'aaaa',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
SHOW CREATE TABLE t2;
|
||
Table Create Table
|
||
t2 CREATE TABLE `t2` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c1` varchar(10) NOT NULL DEFAULT 'bbbb',
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
DROP TABLE t2;
|
||
#
|
||
# Scenario 24:
|
||
# Create a small table, and add stored and(or) virtual columns
|
||
# after last stored column in the table
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT, d INT GENERATED ALWAYS AS (b + c) VIRTUAL, e INT GENERATED ALWAYS AS (b * c) VIRTUAL) ROW_FORMAT=COMPACT;
|
||
INSERT INTO t1(a, b, c) VALUES(0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 5), (0, 5, 6);
|
||
ALTER TABLE t1 ADD COLUMN h INT NOT NULL AFTER c;
|
||
Table id did not change
|
||
count(*) = 1
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c, h) VALUES(0, 6, 20, 40);
|
||
SELECT * FROM t1;
|
||
a b c h d e
|
||
1 1 2 0 3 2
|
||
2 2 3 0 5 6
|
||
3 3 4 0 7 12
|
||
4 4 5 0 9 20
|
||
5 5 6 0 11 30
|
||
6 6 20 40 26 120
|
||
ALTER TABLE t1 ADD COLUMN i VARCHAR(100) DEFAULT 'ABCD EFGH' AFTER h, ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(i)) AFTER i;
|
||
Table id did not change
|
||
SELECT 3 = instant_cols AS `Instant columns equal` FROM information_schema.innodb_tables WHERE name like '%t1%';
|
||
Instant columns equal
|
||
1
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
INSERT INTO t1(a, b, c, h, i) VALUES(0, 20, 30, 50, 'qwerty');
|
||
SELECT * FROM t1;
|
||
a b c h i f d e
|
||
1 1 2 0 ABCD EFGH 9 3 2
|
||
2 2 3 0 ABCD EFGH 9 5 6
|
||
3 3 4 0 ABCD EFGH 9 7 12
|
||
4 4 5 0 ABCD EFGH 9 9 20
|
||
5 5 6 0 ABCD EFGH 9 11 30
|
||
6 6 20 40 ABCD EFGH 9 26 120
|
||
7 20 30 50 qwerty 6 50 600
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` int(11) NOT NULL AUTO_INCREMENT,
|
||
`b` int(11) DEFAULT NULL,
|
||
`c` int(11) DEFAULT NULL,
|
||
`h` int(11) NOT NULL,
|
||
`i` varchar(100) DEFAULT 'ABCD EFGH',
|
||
`f` int(11) GENERATED ALWAYS AS (length(`i`)) VIRTUAL,
|
||
`d` int(11) GENERATED ALWAYS AS ((`b` + `c`)) VIRTUAL,
|
||
`e` int(11) GENERATED ALWAYS AS ((`b` * `c`)) VIRTUAL,
|
||
PRIMARY KEY (`a`)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT
|
||
DROP TABLE t1;
|
||
#
|
||
# Test cases which don't care about row format start here
|
||
#
|
||
#
|
||
# Bug #28040201 ADDING A NEW COLUMN TO A TABLE HAVING A GENRATED COLUMN
|
||
# CRASHES THE SERVER
|
||
#
|
||
CREATE TABLE t1 (a TEXT GENERATED ALWAYS AS (lpad(1, 1, 1)) VIRTUAL);
|
||
ALTER TABLE t1 ADD COLUMN (b INT);
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`a` text GENERATED ALWAYS AS (lpad(1,1,1)) VIRTUAL,
|
||
`b` int(11) DEFAULT NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
DROP TABLE t1;
|
||
#
|
||
# BUG#27784462 - DD::COLUMN::SE_PRIVATE_DATA[TABLE_ID] IS NOT MAINTAINED PROPERLY
|
||
#
|
||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, c INT NOT NULL DEFAULT 5, e INT GENERATED ALWAYS AS ((c + 2)) VIRTUAL) PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20), PARTITION p3 VALUES LESS THAN (30));
|
||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO (PARTITION p1_a VALUES LESS THAN (5), PARTITION p1_b VALUES LESS THAN (10));
|
||
ALTER TABLE t1 ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL, ALGORITHM = INSTANT;
|
||
DROP TABLE t1;
|
||
#
|
||
# Check adding a stored columns(along with virtual columns)
|
||
# after the last stored column of a table with functional index
|
||
# should be fine
|
||
#
|
||
CREATE TABLE t1 (col1 INT, col2 INT AS (col1 + col1), INDEX (col2));
|
||
INSERT INTO t1(col1) VALUES(10), (20), (30), (40);
|
||
ALTER TABLE t1 ADD COLUMN new_col INT AFTER col1, ALGORITHM=INSTANT;
|
||
SELECT * FROM t1;
|
||
col1 new_col col2
|
||
10 NULL 20
|
||
20 NULL 40
|
||
30 NULL 60
|
||
40 NULL 80
|
||
ALTER TABLE t1 ADD COLUMN new_col_1 INT AFTER new_col, ADD COLUMN new_col_2 INT GENERATED ALWAYS AS (new_col * 3), ALGORITHM=INSTANT;
|
||
INSERT INTO t1(col1, new_col, new_col_1) VALUES(100, 200, 300);
|
||
SELECT * FROM t1;
|
||
col1 new_col new_col_1 col2 new_col_2
|
||
10 NULL NULL 20 NULL
|
||
20 NULL NULL 40 NULL
|
||
30 NULL NULL 60 NULL
|
||
40 NULL NULL 80 NULL
|
||
100 200 300 200 600
|
||
SHOW CREATE TABLE t1;
|
||
Table Create Table
|
||
t1 CREATE TABLE `t1` (
|
||
`col1` int(11) DEFAULT NULL,
|
||
`new_col` int(11) DEFAULT NULL,
|
||
`new_col_1` int(11) DEFAULT NULL,
|
||
`col2` int(11) GENERATED ALWAYS AS ((`col1` + `col1`)) VIRTUAL,
|
||
`new_col_2` int(11) GENERATED ALWAYS AS ((`new_col` * 3)) VIRTUAL,
|
||
KEY `col2` (`col2`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
DROP TABLE t1;
|