Автоинкремент обрабатывается различными механизмами хранения по-разному.Например, в MyISAM следующее значение автоинкремента сохраняется, поэтому при перезапуске сервера MySQL это значение автоинкремента будет сохранено.
Однако InnoDB не сохраняет следующее значение автоинкрементаесли вы перезапустите сервер MySQL, он рассчитает текущее максимальное значение и приращение оттуда.
Это актуально для вас, поскольку вы используете InnoDB.Таким образом, если 100 было максимальным значением идентификатора в вашей таблице, то вы удалили эту строку, а затем перезапустили сервер MySQL, а затем он снова использовал бы 100 при следующей вставке.:
mysql> CREATE TABLE `bill` (
-> `id` int(11) NOT NULL auto_increment,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.12 sec)
mysql> -- start at 99 to force next value to 100
mysql> insert into bill values (99);
Query OK, 1 row affected (0.01 sec)
mysql> -- use auto-increment, should be 100
mysql> insert into bill values (null);
Query OK, 1 row affected (0.00 sec)
mysql> select * from bill;
+-----+
| id |
+-----+
| 99 |
| 100 |
+-----+
2 rows in set (0.00 sec)
mysql> -- delete max value
mysql> delete from bill where id = 100;
Query OK, 1 row affected (0.00 sec)
mysql> -- use auto-increment, should be 101
mysql> insert into bill values (null);
Query OK, 1 row affected (0.00 sec)
mysql> select * from bill;
+-----+
| id |
+-----+
| 99 |
| 101 |
+-----+
2 rows in set (0.00 sec)
mysql> -- delete max value
mysql> delete from bill where id = 101;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> /*** RESTART MYSQL ***/
mysql>
mysql> -- use auto-increment, should be 100
mysql> insert into bill values (null);
Query OK, 1 row affected (0.01 sec)
mysql> select * from bill;
+-----+
| id |
+-----+
| 99 |
| 100 |
+-----+
2 rows in set (0.00 sec)