Bug #40253 reset of auto_increment doesn't work
Submitted: 22 Oct 2008 14:36 Modified: 22 Oct 2008 18:21
Reporter: Raffaele Palmieri Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: General Severity:S2 (Serious)
Version:5.1.28-rc OS:Windows
Assigned to: CPU Architecture:Any
Tags: ALTER TABLE, auto_increment

[22 Oct 2008 14:36] Raffaele Palmieri
Description:
If i create an inno db table without set of auto_increment value and then, after removing all rows, i change auto_increment value, it isn't applied.

How to repeat:
Execute this script:
----------------------------------------------------------------------------
-- i create the table without set auto_increment, so it should start from 0
CREATE TABLE `test`.`tabletest` (
  `stringa` VARCHAR(20) NOT NULL,
  `id` INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
)
ENGINE = InnoDB;

insert into test.tabletest(stringa) values('test');
-- delete all rows, so I assure you that if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.
delete from test.tabletest;
-- reset auto_increment
alter table test.tabletest auto_increment = 0
---------------------------------------------------------------------------
Then you can execute show status command in following manner:
SHOW TABLE STATUS FROM test like 'table%';

Suggested fix:
I don't know, but it seems to be very strange.
[22 Oct 2008 16:40] Valeriy Kravchuk
Thank you for a problem report. 

According to the manual (http://dev.mysql.com/doc/refman/5.1/en/create-table.html): "AUTO_INCREMENT sequences begin with 1." 

If you reset to valid auto_increment initial value, it works... But the fact that there is no even warning for an ALTER TABLE that does nothing I'd consider a minor bug.
[22 Oct 2008 17:32] Raffaele Palmieri
So, you are saying that if I set auto_increment value to 1, should it work?
[22 Oct 2008 17:55] Valeriy Kravchuk
Yes, it works for me. Look:

C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3310 test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.28-rc-community MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE TABLE `test`.`tabletest` (
    ->   `stringa` VARCHAR(20) NOT NULL,
    ->   `id` INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT,
    ->   PRIMARY KEY (`id`)
    -> )
    -> ENGINE = InnoDB;
Query OK, 0 rows affected (0.75 sec)

mysql> insert into test.tabletest(stringa) values('test');
Query OK, 1 row affected (0.09 sec)

mysql> show table status like 'tablet%'\G
*************************** 1. row ***************************
           Name: tabletest
         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: 232783872
 Auto_increment: 2
    Create_time: 2008-10-22 19:32:55
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.77 sec)

mysql> delete from test.tabletest;
Query OK, 1 row affected (0.09 sec)

mysql> alter table tabletest auto_increment=1;
Query OK, 0 rows affected (0.59 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show table status like 'tablet%'\G
*************************** 1. row ***************************
           Name: tabletest
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 232783872
 Auto_increment: 1
    Create_time: 2008-10-22 19:32:55
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

mysql> alter table tabletest auto_increment=0;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show table status like 'tablet%'\G
*************************** 1. row ***************************
           Name: tabletest
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 232783872
 Auto_increment: 1
    Create_time: 2008-10-22 19:32:55
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)
[22 Oct 2008 18:21] Raffaele Palmieri
Ok thank you, tomorrow I will try with your suggest.
[5 Nov 2008 20:53] Mikhail Izioumtchenko
if "alter table foo auto_increment=0" being ignored without a warning,
it's not an InnoDB bug as it's the same for myisam tables. The sequence below 
is for 5.1.29-rc. So I'm changing assignment/category accordingly.

mysql> show table status like 'i' \G
*************************** 1. row ***************************
           Name: i
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 2
 Avg_row_length: 7
    Data_length: 14
Max_data_length: 1970324836974591
   Index_length: 2048
      Data_free: 0
 Auto_increment: 3
    Create_time: 2008-11-05 12:48:01
    Update_time: 2008-11-05 12:48:16
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.01 sec)

mysql> alter table i auto_increment=0;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql>  show table status like 'i' \G
*************************** 1. row ***************************
           Name: i
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 2
 Avg_row_length: 7
    Data_length: 14
Max_data_length: 1970324836974591
   Index_length: 2048
      Data_free: 0
 Auto_increment: 3
    Create_time: 2008-11-05 12:48:55
    Update_time: 2008-11-05 12:48:55
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

mysql>  alter table i auto_increment=-12;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-12' at line 1
mysql>