Bug #68336 | bug with ALTER TABLE AUTO_INCREMENT | ||
---|---|---|---|
Submitted: | 11 Feb 2013 9:41 | Modified: | 3 Apr 2013 15:35 |
Reporter: | James Ostrowick | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Command-line Clients | Severity: | S2 (Serious) |
Version: | 5.6.10 | OS: | MacOS |
Assigned to: | CPU Architecture: | Any | |
Tags: | alter, auto_increment, regression, table |
[11 Feb 2013 9:41]
James Ostrowick
[11 Feb 2013 12:18]
MySQL Verification Team
Hello James, Thank you for the report. Verified as described on reported version.
[11 Feb 2013 12:18]
MySQL Verification Team
## 5.1.68 - is not affected mysql> create table users ( -> user_id int(11) NOT NULL AUTO_INCREMENT, -> user_name varchar(250) NOT NULL DEFAULT 'None', -> PRIMARY KEY (user_id) -> ); Query OK, 0 rows affected (0.01 sec) mysql> mysql> mysql> insert into users(user_name) values('umesh'),('umesh1'),('umesh2'); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from users; +---------+-----------+ | user_id | user_name | +---------+-----------+ | 1 | umesh | | 2 | umesh1 | | 3 | umesh2 | +---------+-----------+ 3 rows in set (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 3 Avg_row_length: 20 Data_length: 60 Max_data_length: 281474976710655 Index_length: 2048 Data_free: 0 Auto_increment: 4 Create_time: 2013-02-11 17:10:13 Update_time: 2013-02-11 17:11:23 Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) mysql> delete from users where user_id > 1; Query OK, 2 rows affected (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 1 Avg_row_length: 20 Data_length: 60 Max_data_length: 281474976710655 Index_length: 2048 Data_free: 40 Auto_increment: 4 Create_time: 2013-02-11 17:10:13 Update_time: 2013-02-11 17:11:23 Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) mysql> mysql> ALTER TABLE users AUTO_INCREMENT = 1; Query OK, 1 row affected (0.03 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 1 Avg_row_length: 20 Data_length: 20 Max_data_length: 281474976710655 Index_length: 2048 Data_free: 0 Auto_increment: 2 Create_time: 2013-02-11 17:14:34 Update_time: 2013-02-11 17:14:34 Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) mysql> insert into users(user_name) values('umesh'); Query OK, 1 row affected (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 2 Avg_row_length: 20 Data_length: 40 Max_data_length: 281474976710655 Index_length: 2048 Data_free: 0 Auto_increment: 3 Create_time: 2013-02-11 17:43:43 Update_time: 2013-02-11 17:44:00 Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)
[11 Feb 2013 12:19]
MySQL Verification Team
## 5.5.30 - is not affected D:\ushastry\mysql-5.1.68-win32\bin>cd ../../mysql-5.5.30-winx64/bin D:\ushastry\mysql-5.5.30-winx64\bin>mysql -u root -p --port=1111 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.30 MySQL Community Server (GPL) Copyright (c) 2000, 2013, 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> use test Database changed mysql> mysql> create table users ( -> user_id int(11) NOT NULL AUTO_INCREMENT, -> user_name varchar(250) NOT NULL DEFAULT 'None', -> PRIMARY KEY (user_id) -> ); Query OK, 0 rows affected (0.01 sec) mysql> insert into users(user_name) values('umesh'),('umesh1'),('umesh2'); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from users; +---------+-----------+ | user_id | user_name | +---------+-----------+ | 1 | umesh | | 2 | umesh1 | | 3 | umesh2 | +---------+-----------+ 3 rows in set (0.00 sec) mysql> delete from users where user_id > 1; Query OK, 2 rows affected (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: InnoDB Version: 10 Row_format: Compact Rows: 1 Avg_row_length: 16384 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 10485760 Auto_increment: 4 Create_time: 2013-02-11 17:18:48 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: mysql> ALTER TABLE users AUTO_INCREMENT = 1; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: InnoDB Version: 10 Row_format: Compact Rows: 1 Avg_row_length: 16384 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 10485760 Auto_increment: 2 Create_time: 2013-02-11 17:18:48 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) mysql> mysql> insert into users(user_name) values('umesh'); Query OK, 1 row affected (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: InnoDB Version: 10 Row_format: Compact Rows: 2 Avg_row_length: 8192 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 9437184 Auto_increment: 3 Create_time: 2013-02-11 17:18:48 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) mysql>
[11 Feb 2013 12:19]
MySQL Verification Team
# 5.6.10 - Affected D:\ushastry\mysql-5.6.10-winx64\bin>mysql -u root -p --port=3333 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.10 MySQL Community Server (GPL) Copyright (c) 2000, 2013, 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> use test Database changed mysql> mysql> create table users ( -> user_id int(11) NOT NULL AUTO_INCREMENT, -> user_name varchar(250) NOT NULL DEFAULT 'None', -> PRIMARY KEY (user_id) -> ); Query OK, 0 rows affected (0.02 sec) mysql> insert into users(user_name) values('umesh'),('umesh1'),('umesh2'); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> mysql> select * from users; +---------+-----------+ | user_id | user_name | +---------+-----------+ | 1 | umesh | | 2 | umesh1 | | 3 | umesh2 | +---------+-----------+ 3 rows in set (0.00 sec) mysql> mysql> delete from users where user_id > 1; Query OK, 2 rows affected (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: InnoDB Version: 10 Row_format: Compact Rows: 1 Avg_row_length: 16384 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: 4 Create_time: 2013-02-11 17:22:39 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) mysql> ALTER TABLE users AUTO_INCREMENT = 1; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: InnoDB Version: 10 Row_format: Compact Rows: 1 Avg_row_length: 16384 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: 1 Create_time: 2013-02-11 17:24:04 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) ## Next insert will cause the duplicate entry error but this will set Auto_increment to 2. Subsequent entries will not have any issues there after. mysql> insert into users(user_name) values('umesh'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' mysql> select * from users; +---------+-----------+ | user_id | user_name | +---------+-----------+ | 1 | umesh | +---------+-----------+ 1 row in set (0.00 sec) mysql> show table status from test where name like 'users'\G *************************** 1. row *************************** Name: users Engine: InnoDB Version: 10 Row_format: Compact Rows: 1 Avg_row_length: 16384 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: 2 Create_time: 2013-02-11 17:33:39 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)
[20 Feb 2013 8:40]
James Ostrowick
Hi Umesh, Thanks for your contribution, but as can be seen from my bug report this only affects the 5.6.10 release. I did state that this worked on earlier releases.
[3 Apr 2013 15:35]
Bugs System
Added changelog entry for 5.6.11, 5.7.1: "When using "ALTER TABLE" to set an "AUTO_INCREMENT" column value to a user-specified value, InnoDB would set the "AUTO_INCREMENT" value to the user-specified value even when the "AUTO_INCREMENT" value is greater than the user-specified value. This fix ensures that the "AUTO_INCREMENT" value is set to the maximum of the user-specified value and MAX(auto_increment_column)+1, which is the expected behaviour."