CREATE TABLE t1(f1 INT NOT NULL, f2 CHAR(200), f3 CHAR(200))ENGINE=InnoDB; INSERT INTO t1 VALUES(3, "innodb", "alter log"); SET DEBUG_SYNC="inplace_after_index_build SIGNAL dml_start WAIT_FOR dml_commit"; ALTER TABLE t1 ADD PRIMARY KEY(f3(10)), ADD UNIQUE KEY(f2(10)); CONNECT con1,localhost,root,,,; SET DEBUG_SYNC="now WAIT_FOR dml_start"; BEGIN; INSERT INTO t1 VALUES(1, repeat('b', 100), repeat('c', 100)); INSERT INTO t1 VALUES(2, repeat('b', 100), repeat('a', 100)); COMMIT; SET DEBUG_SYNC="now SIGNAL dml_commit"; connection default; ERROR 23000: Duplicate entry 'bbbbbbbbbb' for key 'f2' connection default; SET DEBUG_SYNC="inplace_after_index_build SIGNAL dml_start WAIT_FOR dml_commit"; ALTER TABLE t1 ADD PRIMARY KEY(f1); connection con1; SET DEBUG_SYNC="now WAIT_FOR dml_start"; INSERT INTO t1 SELECT 10, repeat('a', 100), repeat('b', 100) FROM seq_1_to_4800; SET DEBUG_SYNC="now SIGNAL dml_commit"; connection default; ERROR HY000: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again DELETE FROM t1; INSERT INTO t1 VALUES(1, repeat('a', 100), repeat('b', 100)); ALTER TABLE t1 ADD PRIMARY KEY(f1); set DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL dml_start WAIT_FOR dml_commit"; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(f3(10)); connection con1; SET DEBUG_SYNC="now WAIT_FOR dml_start"; BEGIN; INSERT INTO t1 VALUES(2, repeat('b', 100), repeat('c', 100)); UPDATE t1 set f3=repeat('c', 100) where f1=1; COMMIT; SET DEBUG_SYNC="now SIGNAL dml_commit"; connection default; ERROR 23000: Duplicate entry 'cccccccccc' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` int(11) NOT NULL, `f2` char(200) DEFAULT NULL, `f3` char(200) DEFAULT NULL, PRIMARY KEY (`f1`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci DROP TABLE t1; disconnect con1; SET DEBUG_SYNC=reset;