Bug #93748 | AUTO_INCREMENT Changes only once | ||
---|---|---|---|
Submitted: | 27 Dec 2018 13:54 | Modified: | 4 Jan 2019 14:30 |
Reporter: | dbForge Team | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: Information schema | Severity: | S2 (Serious) |
Version: | 8.0.11 | OS: | Windows |
Assigned to: | CPU Architecture: | Any | |
Tags: | regression |
[27 Dec 2018 13:54]
dbForge Team
[27 Dec 2018 16:06]
MySQL Verification Team
Thank you for the bug report. C:\dbs>c:\dbs\8.0\bin\mysql -uroot --port=3580 -p --prompt="mysql 8.0 > " --default-character-set=utf8mb4 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 8.0.15 Source distribution BUILD: 2018-DEC-11 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 8.0 > CREATE DATABASE db1; Query OK, 1 row affected (0.01 sec) mysql 8.0 > USE db1; Database changed mysql 8.0 > CREATE TABLE table1 ( -> id int(11) NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (id) -> ); Query OK, 0 rows affected (0.06 sec) mysql 8.0 > ALTER TABLE table1 AUTO_INCREMENT = 10; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql 8.0 > SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table1'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table1 | 10 | +------------+----------------+ 1 row in set (0.01 sec) mysql 8.0 > SHOW CREATE TABLE table1\G *************************** 1. row *************************** Table: table1 Create Table: CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) mysql 8.0 > ALTER TABLE table1 AUTO_INCREMENT = 2; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql 8.0 > SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table1'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table1 | 10 | +------------+----------------+ 1 row in set (0.00 sec) mysql 8.0 > SHOW CREATE TABLE table1\G *************************** 1. row *************************** Table: table1 Create Table: CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) mysql 8.0 > exit Bye C:\dbs>c:\dbs\8.0\bin\mysql -uroot --port=3580 -p --prompt="mysql 8.0 > " --default-character-set=utf8mb4 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 8.0.15 Source distribution BUILD: 2018-DEC-11 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 8.0 > SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table1'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table1 | 10 | +------------+----------------+ 1 row in set (0.01 sec) mysql 8.0 > SHOW CREATE TABLE db1.table1\G *************************** 1. row *************************** Table: table1 Create Table: CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) mysql 8.0 > use db1; Database changed mysql 8.0 > insert into table1 values (NULL); Query OK, 1 row affected (0.01 sec) mysql 8.0 > SELECT * FROM table1; +----+ | id | +----+ | 2 | +----+ 1 row in set (0.00 sec) mysql 8.0 > SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table1'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table1 | 10 | +------------+----------------+ 1 row in set (0.00 sec) https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html Note ALTER TABLE ... AUTO_INCREMENT = N can only change the auto-increment counter value to a value larger than the current maximum.
[28 Dec 2018 12:03]
Frederic Descamps
This is because the information_schema statistics are cached: information_schema_stats_expiry = 86400 If you run: mysql> analyze table table1; +------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------+---------+----------+----------+ | db1.table1 | analyze | status | OK | +------------+---------+----------+----------+ 1 row in set (0.82 sec) mysql> SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table1'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table1 | 2 | +------------+----------------+ 1 row in set (0.03 sec) See this test: mysql> SET information_schema_stats_expiry=10; Query OK, 0 rows affected (0.00 sec) mysql> mysql> CREATE TABLE table2 ( -> id int(11) NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (id) -> ); Query OK, 0 rows affected (0.96 sec) mysql> mysql> ALTER TABLE table2 AUTO_INCREMENT = 10; Query OK, 0 rows affected (0.53 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table2'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table2 | 10 | +------------+----------------+ 1 row in set (0.04 sec) mysql> mysql> ALTER TABLE table2 AUTO_INCREMENT = 2; Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table2'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table2 | 10 | +------------+----------------+ 1 row in set (0.00 sec) mysql> select sleep(10); +-----------+ | sleep(10) | +-----------+ | 0 | +-----------+ 1 row in set (10.00 sec) mysql> SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t WHERE t.table_schema = 'db1' AND t.table_name = 'table2'; +------------+----------------+ | TABLE_NAME | AUTO_INCREMENT | +------------+----------------+ | table2 | 2 | +------------+----------------+ 1 row in set (0.06 sec)
[4 Jan 2019 14:30]
Ståle Deraas
Posted by developer: Based on the explanation from Lefred, I am closing as "not a bug"