diff --git a/ddl/ddl_db_test.go b/ddl/ddl_db_test.go index 1c2149b84bf84..5281ad21c3811 100644 --- a/ddl/ddl_db_test.go +++ b/ddl/ddl_db_test.go @@ -455,6 +455,27 @@ func (s *testDBSuite) testAlterLock(c *C) { s.mustExec(c, "alter table t_indx_lock add index (c1, c2), lock=none") } +func (s *testDBSuite) TestAddMultiColumnsIndex(c *C) { + s.tk = testkit.NewTestKit(c, s.store) + s.tk.MustExec("use " + s.schemaName) + + s.tk.MustExec("drop database if exists tidb;") + s.tk.MustExec("create database tidb;") + s.tk.MustExec("use tidb;") + s.tk.MustExec("create table tidb.test (a int auto_increment primary key, b int);") + s.tk.MustExec("insert tidb.test values (1, 1);") + s.tk.MustExec("update tidb.test set b = b + 1 where a = 1;") + s.tk.MustExec("insert into tidb.test values (2, 2);") + // Test that the b value is nil. + s.tk.MustExec("insert into tidb.test (a) values (3);") + s.tk.MustExec("insert into tidb.test values (4, 4);") + // Test that the b value is nil again. + s.tk.MustExec("insert into tidb.test (a) values (5);") + s.tk.MustExec("insert tidb.test values (6, 6);") + s.tk.MustExec("alter table tidb.test add index idx1 (a, b);") + s.tk.MustExec("admin check table test") +} + func (s *testDBSuite) TestAddIndex(c *C) { s.tk = testkit.NewTestKit(c, s.store) s.tk.MustExec("use " + s.schemaName) diff --git a/ddl/index.go b/ddl/index.go index 0ce973f22ca38..dfd72378cad6b 100644 --- a/ddl/index.go +++ b/ddl/index.go @@ -460,6 +460,8 @@ func (w *worker) getIndexRecord(t table.Table, colMap map[int64]*types.FieldType idxColumnVal := w.rowMap[col.ID] if _, ok := w.rowMap[col.ID]; ok { idxVal[j] = idxColumnVal + // Make sure there is no dirty data. + delete(w.rowMap, col.ID) continue } idxColumnVal, err = tables.GetColDefaultValue(w.ctx, col, w.defaultVals)