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.