diff --git a/mysql-test/suite/versioning/r/alter.result b/mysql-test/suite/versioning/r/alter.result
index 1c1f304441475db934c13bf9204a1817d493d1d5..3edca01bd6841ceaec6dff8daa77bb9706eef3ac 100644
--- a/mysql-test/suite/versioning/r/alter.result
+++ b/mysql-test/suite/versioning/r/alter.result
@@ -405,32 +405,13 @@ call verify_vtq;
 No	A	B	C	D
 1	1	1	1	1
 2	1	1	1	1
-alter table t add b int auto_increment unique;
-call verify_vtq;
-No	A	B	C	D
-select * from t for system_time all;
-a	b
-1	-1
-2	-2
-3	1
-insert into t values (4, NULL);
-select * from t for system_time all;
-a	b
-1	-1
-2	-2
-3	1
-4	2
-call verify_vtq;
-No	A	B	C	D
-1	1	1	1	1
-create or replace table t (a int) with system versioning;
-insert into t values (1), (2), (3);
-delete from t where a<3;
 alter table t add b int not null unique;
 ERROR 23000: Duplicate entry '...' for key 'b'
 alter table t add b int auto_increment unique;
-ERROR 42000: Table '#sql-temporary' uses an extension that doesn't exist in this MariaDB version
+ERROR 42000: Table 'test/t' uses an extension that doesn't exist in this MariaDB version
 alter table t add b int auto_increment null unique;
+call verify_vtq;
+No	A	B	C	D
 select * from t;
 a	b
 3	1
@@ -446,35 +427,20 @@ a	b
 2	NULL
 3	1
 4	2
-create or replace table t (a int) with system versioning engine=innodb;
-insert into t values (1), (2), (3);
-delete from t where a<3;
-call verify_vtq;
-No	A	B	C	D
-1	1	1	1	1
-2	1	1	1	1
-alter table t add b tinyint auto_increment unique;
-call verify_vtq;
-No	A	B	C	D
-select * from t for system_time all;
-a	b
-1	-1
-2	-2
-3	1
-insert into t values (4, NULL);
-select * from t for system_time all;
-a	b
-1	-1
-2	-2
-3	1
-4	2
 call verify_vtq;
 No	A	B	C	D
 1	1	1	1	1
 create or replace table t (a int) with system versioning;
 insert into t values (1), (2), (3);
 delete from t where a<3;
-alter table t add b tinyint auto_increment null unique;
+alter table t add b int not null unique;
+ERROR 23000: Duplicate entry '...' for key 'b'
+alter table t add b int auto_increment unique;
+ERROR 42000: Table '#sql-temporary' uses an extension that doesn't exist in this MariaDB version
+alter table t add b int auto_increment null unique;
+select * from t;
+a	b
+3	1
 select * from t for system_time all;
 a	b
 1	NULL
diff --git a/mysql-test/suite/versioning/t/alter.test b/mysql-test/suite/versioning/t/alter.test
index 7176a704ebcfe79f0c7268d9704bf9f169276914..5e4d389f5a0313a58fbca49f5ffe87b836540452 100644
--- a/mysql-test/suite/versioning/t/alter.test
+++ b/mysql-test/suite/versioning/t/alter.test
@@ -209,10 +209,16 @@ create or replace table t (a int) with system versioning engine=innodb;
 insert into t values (1), (2), (3);
 delete from t where a<3;
 call verify_vtq;
+--replace_regex /'0-[- 0-9.:]+'/'...'/
+--error ER_DUP_ENTRY
+alter table t add b int not null unique;
+--error ER_UNSUPPORTED_EXTENSION
 alter table t add b int auto_increment unique;
+alter table t add b int auto_increment null unique;
 call verify_vtq;
+select * from t;
 select * from t for system_time all;
-insert into t values (4, NULL);
+insert into t values (4, 0);
 select * from t for system_time all;
 call verify_vtq;
 
@@ -231,27 +237,6 @@ select * from t for system_time all;
 insert into t values (4, 0);
 select * from t for system_time all;
 
-create or replace table t (a int) with system versioning engine=innodb;
-insert into t values (1), (2), (3);
-delete from t where a<3;
-call verify_vtq;
-alter table t add b tinyint auto_increment unique;
-call verify_vtq;
-select * from t for system_time all;
-insert into t values (4, NULL);
-select * from t for system_time all;
-call verify_vtq;
-
-create or replace table t (a int) with system versioning;
-insert into t values (1), (2), (3);
-delete from t where a<3;
-# kvm-deb-trusty-ppc64le fails with "Out of range value for column 'b' at row 3"
---error 0,ER_WARN_DATA_OUT_OF_RANGE
-alter table t add b tinyint auto_increment null unique;
-select * from t for system_time all;
-insert into t values (4, 0);
-select * from t for system_time all;
-
 create or replace table t (
   a int,
   sys_trx_start bigint(20) unsigned generated always as row start,
diff --git a/sql/handler.cc b/sql/handler.cc
index a38113e826206e868a0272a84ac3f0dda2ce34c6..9ad866d92deebd9da8005d441c8e5789c50e240a 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -3071,8 +3071,8 @@ int handler::update_auto_increment()
         table->next_number_field->set_null();
         DBUG_RETURN(0);
       }
+      table->next_number_field->set_notnull();
     }
-    table->next_number_field->set_notnull();
   }
 
   /*
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index 7dd153253696292f0ef920e1eb62b0d489071ca9..3515e59d30a18cdcb4c0e7c8fca993b9b899acce 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -1742,9 +1742,9 @@ row_merge_read_clustered_index(
 	double 			curr_progress = 0.0;
 	ib_uint64_t		read_rows = 0;
 	ib_uint64_t		table_total_rows = 0;
-	ulonglong		historic_auto_decrement = 0xffffffffffffffff;
 	char			new_sys_trx_start[8];
 	char			new_sys_trx_end[8];
+	byte			any_autoinc_data[8] = {0};
 
 	DBUG_ENTER("row_merge_read_clustered_index");
 
@@ -2253,9 +2253,26 @@ row_merge_read_clustered_index(
 					= dfield->is_version_historical_end();
 			}
 
-			const dfield_t*	dfield;
+			dfield_t*	dfield;
 
 			dfield = dtuple_get_nth_field(row, add_autoinc);
+
+			if (new_table->versioned()) {
+				if (historical_row) {
+					if (dfield_get_type(dfield)->prtype & DATA_NOT_NULL) {
+						err = DB_UNSUPPORTED;
+						my_error(ER_UNSUPPORTED_EXTENSION, MYF(0),
+							 old_table->name);
+						goto func_exit;
+					}
+					dfield_set_null(dfield);
+				} else {
+					// set not null
+					ulint len = dfield_get_type(dfield)->len;
+					dfield_set_data(dfield, any_autoinc_data, len);
+				}
+			}
+
 			if (dfield_is_null(dfield)) {
 				goto write_buffers;
 			}
@@ -2273,12 +2290,7 @@ row_merge_read_clustered_index(
 				goto func_exit;
 			}
 
-			ulonglong value;
-			if (likely(!historical_row)) {
-				value = sequence++;
-			} else {
-				value = historic_auto_decrement--;
-			}
+			ulonglong	value = sequence++;
 
 			switch (dtype_get_mtype(dtype)) {
 			case DATA_INT: {