Bug #37644 | Truncate does not reset auto-increment value (InnoDB) | ||
---|---|---|---|
Submitted: | 25 Jun 2008 20:23 | Modified: | 25 Jun 2008 22:11 |
Reporter: | JF Prieur | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S3 (Non-critical) |
Version: | 5.0.45 | OS: | Linux (Fedora 8) |
Assigned to: | CPU Architecture: | Any |
[25 Jun 2008 20:23]
JF Prieur
[25 Jun 2008 21:22]
MySQL Verification Team
Thank you for the bug report. I did a simple test case on FC 8 with server built from source and on Windows with release 5.0.51b and I can't repeat (if you have a repeatable test case please provide it). Thanks in advance. Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.0.51b-community-nt MySQL Community Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> drop database if exists wd; Query OK, 1 row affected (0.06 sec) mysql> create database wd; Query OK, 1 row affected (0.02 sec) mysql> use wd; Database changed mysql> create table tw (id int auto_increment not null primary key) engine innodb; Query OK, 0 rows affected (0.11 sec) mysql> show create table tw\G *************************** 1. row *************************** Table: tw Create Table: CREATE TABLE `tw` ( `id` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.02 sec) mysql> insert into tw values (null),(null); Query OK, 2 rows affected (0.03 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from tw; +----+ | id | +----+ | 1 | | 2 | +----+ 2 rows in set (0.00 sec) mysql> truncate tw; Query OK, 2 rows affected (0.05 sec) mysql> show table status from wd\G *************************** 1. row *************************** Name: tw 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: 0 Auto_increment: 1 Create_time: 2008-06-25 18:16:28 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: InnoDB free: 5120 kB 1 row in set (0.00 sec) mysql> select * from tw; Empty set (0.00 sec) mysql> insert into tw values (null),(null); Query OK, 2 rows affected (0.06 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from tw; +----+ | id | +----+ | 1 | | 2 | +----+ 2 rows in set (0.00 sec) mysql>
[25 Jun 2008 21:39]
JF Prieur
Thanks for the quick reply. I believe the problem may be the following: (I have attached the dump for my database along with some data so you can see) When I truncate each table individually, you are correct the auto-increment value goes back to 1. I have relationships between these tables and am using foreign keys. When I truncate the first table (pdb_info) which deletes all the other records in the other tables (since I have set DELETE cascade), the auto_increment is set to 1 for the pdb_info table but not for the other, linked tables, whose value for auto_increment stays at the last row ID +1 value. I do not know if this behaviour is by design or not. I hope this info helps a bit more,
[25 Jun 2008 22:11]
MySQL Verification Team
Thank you for the feedback. Indeed that behavior is by design and documented, please see: http://dev.mysql.com/doc/refman/5.0/en/truncate.html http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html "Under some conditions, TRUNCATE tbl_name for an InnoDB table is mapped to DELETE FROM tbl_name and doesn't reset the AUTO_INCREMENT counter. See Section 12.2.9, “TRUNCATE Syntax”.