mysqli_rollback - увеличивает колличестов id можно этого избежать?

Рейтинг: 1Ответов: 1Опубликовано: 31.01.2023

mysqli_rollback($db) - увеличивает количество id при откатах. Можно этого избежать? что при откате id в базе оставался таким же как и до отката (не удавшейся транзакции)?

Ответы

▲ 4Принят

Никак. auto_increment намеренно сделан не транзакционным и потому не откатывается при rollback. Так сделано специально для улучшения конкурентной обработки транзакций.

Ведь если бы последовательность откатывалась при rollback, это бы одновременно означало, что может одновременно выполняться только одна транзакция, пишущая в эту таблицу. Вторая транзакция бы не знала, какое значение ей можно использовать - следующее (если первая транзакция будет зафиксирована с commit) или то же самое что у первой транзакции (если та отменится). И поэтому при получении запроса insert в эту табличку начинала бы ждать окончание всей предшествующей очереди транзакций, желающих что-то записать в эту табличку.


Почему вас это беспокоит в целом? auto_increment даёт уникальное значение для этого поля. Всё. Больше ничего он не гарантирует. Ни неразрывности последовательности, ни, на самом деле, даже порядка - нет ничего неверного в том, если id = 5 будет записан раньше id = 3 при параллельной обработке транзакций.

auto_increment используется для суррогатного ключа, нет никакой разницы, какое значение он выдал.