mysql> create table testauto(urutan int auto_increment primary key)engine=InnoDb;
Query OK, 0 rows affected (1.84 sec)
mysql> show create table testauto\G
*************************** 1. row ***************************
Table: testauto
Create Table: CREATE TABLE `testauto` (
`urutan` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`urutan`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into testauto(urutan) values(null);
Query OK, 1 row affected (0.00 sec)
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 1 |
+------------------+
1 row in set (0.02 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from testauto;
Empty set (0.00 sec)
mysql> insert into testauto(urutan) values(null);
Query OK, 1 row affected (0.00 sec)
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 2 |
+------------------+
1 row in set (0.00 sec)
Setelah membaca beberapa referensi, ternyata hal ini sudah dilaporkan sebagai bug sejak November 2004 (Bug #6714). Namun status dari bug tersebut adalah Won't fix, dikarenakan apabila nilai auto_increment di rollback akan muncul gap pada urutan yang dibuat seperti yang dituliskan pada komentar bug ini.Solusinya? Pertama, bisa buat custom auto_increment dengan stored procedure atau trigger. Kedua, biarkan saja, toh auto_increment itu nilai maksimalnya besar dan jika masih kurang bisa pakai big int sebagai tipe data kolom tersebut.