Khi xóa bản ghi có ID lớn nhất, restart MySQL, hoặc chèn mới → có thể gây phân mảnh (gap) trong dãy auto_increment.
MySQL 5.6+ InnoDB cho phép reuse ID bằng cách chỉ định giá trị trong INSERT.
Tình huống gây phân mảnh
- Xóa ID lớn nhất
- Khởi động lại MySQL server
- Chèn bản ghi mới
Ví dụ
mysql> CREATE TABLE UniqueAutoId (
-> id INT AUTO_INCREMENT,
-> UNIQUE(id)
-> );
Query OK, 0 rows affected (0.45 sec)
mysql> INSERT INTO UniqueAutoId VALUES(); -- 5 lần Query OK, 1 row affected ... (x5)
mysql> SELECT * FROM UniqueAutoId;
+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | +----+ 5 rows in set (0.00 sec)
Xóa id=5 (ID lớn nhất)
mysql> DELETE FROM UniqueAutoId WHERE id=5; Query OK, 1 row affected (0.14 sec)
+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | +----+ 4 rows in set (0.00 sec)
Xóa id=2 (giữa)
mysql> DELETE FROM UniqueAutoId WHERE id=2; Query OK, 1 row affected (0.15 sec)
+----+ | id | +----+ | 1 | | 3 | | 4 | +----+ 3 rows in set (0.00 sec)
Dãy ID bị phân mảnh: 1, 3, 4 (thiếu 2, 5).