Ответ 1
Нет, механизмы автоинкремента должны работать вне сферы транзакций, потому что другой пользователь может вставить в ту же таблицу, прежде чем завершить транзакцию. Другая пользовательская транзакция должна иметь возможность выделить следующее значение, прежде чем узнать, использует ли ваша транзакция только что выделенное значение.
Повторите свой комментарий: если я могу сказать это более четко, любое изменение в объеме транзакции может быть отменено. Счетчик автоинкремента не откатывается, поэтому он не подчиняется транзакциям атомарности. Он также не подчиняется изоляции, потому что другая транзакция получает следующее значение, даже если транзакция еще не выполнена.
Способ автоинкремента означает, что иногда, если вы вставляете некоторые строки и затем откатываете транзакцию, значения, которые вы выделили с помощью автоматического увеличения, теряются навсегда!
Но все в порядке. Значения первичного ключа должны быть уникальными, но они не обязательно должны быть последовательными. Другими словами, они не являются номерами строк, и вы не должны использовать их так. Поэтому вам не нужно будет уменьшать значения, созданные с помощью автоматического увеличения.