diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index c4100d5d23027..efeac9cebcddb 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -2793,6 +2793,23 @@ func TestAutoIncrementForce(t *testing.T) { tk.MustQuery("select * from t;").Check(testkit.Rows("101", "112", "500")) tk.MustQuery("select * from t order by a;").Check(testkit.Rows("101", "112", "500")) tk.MustExec("drop table if exists t;") + + // Check for warning in case we can't set the auto_increment to the desired value + tk.MustExec("create table t(a int primary key auto_increment)") + tk.MustExec("insert into t values (200)") + tk.MustQuery("show create table t").Check(testkit.Rows( + "t CREATE TABLE `t` (\n" + + " `a` int(11) NOT NULL AUTO_INCREMENT,\n" + + " PRIMARY KEY (`a`) /*T![clustered_index] CLUSTERED */\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=5201")) + tk.MustExec("alter table t auto_increment=100;") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 Can't reset AUTO_INCREMENT to 100 without FORCE option, using 5201 instead")) + tk.MustQuery("show create table t").Check(testkit.Rows( + "t CREATE TABLE `t` (\n" + + " `a` int(11) NOT NULL AUTO_INCREMENT,\n" + + " PRIMARY KEY (`a`) /*T![clustered_index] CLUSTERED */\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=5201")) + tk.MustExec("drop table t") } func TestIssue20490(t *testing.T) { diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 40d3e9fdf0ce5..169f7a6b309ef 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -3247,10 +3247,17 @@ func (d *ddl) RebaseAutoID(ctx sessionctx.Context, ident ast.Ident, newBase int6 } if !force { - newBase, err = adjustNewBaseToNextGlobalID(ctx, t, tp, newBase) + newBaseTemp, err := adjustNewBaseToNextGlobalID(ctx, t, tp, newBase) if err != nil { return err } + if newBase != newBaseTemp { + ctx.GetSessionVars().StmtCtx.AppendWarning( + fmt.Errorf("Can't reset AUTO_INCREMENT to %d without FORCE option, using %d instead", + newBase, newBaseTemp, + )) + } + newBase = newBaseTemp } job := &model.Job{ SchemaID: schema.ID,