Таблица MySQL с основным идентификатором AUTO_INCREMENT не освобождает номер после отката - PullRequest
1 голос
/ 20 января 2011

У меня есть стол с векселями. Каждый счет имеет идентификатор, который приходит из БД после того, как я вставляю новую запись. Поле INTEGER с установленным значением AUTO_INCREMENT.

Если я вставлю новую запись как часть транзакции и мне придется откатить эту транзакцию, идентификатор будет удален. Поэтому следующая запись становится идентификатором на порядок выше, хотя этот идентификатор не используется.

Было бы лучше, чтобы счета имели линейную нумерацию, чтобы бухгалтерия могла выяснить, если что-то не так.

1 Ответ

5 голосов
/ 20 января 2011

По причинам параллелизма значение автоинкремента не может «откатиться» с вашей транзакцией.Если другой процесс вставил записи во время выполнения транзакции, вы рискуете столкнуться с их идентификаторами позже.

В качестве примера, скажем, ваша транзакция в процессе «А» получает идентификаторы 1,2 и 3.Другой процесс «B» запускается и получает идентификаторы 4 и 5. Если идентификация откатывается с вашей транзакцией, а следующий процесс «C» требует 5 идентификаторов, он получит 1,2,3,4,5, но 4 и 5 былиуже взят процесс "B".

...