Потому что номерная серия используется многими пользователями, и если бы она обновлялась в рамках основной сессии (и основной транзакции), то запись бы блокировалась до окончания основной транзакции. (которая вполне может минут 10-15 длиться в тяжелом случае).
А проверка уровня транзакции 0, она с другим механизмом связана, с механизмом непрерывных номерных серий. Там кроме самой серии ведется табличка с выделенными номерами. Когда номер выделяется, он в это табличке помечается как Нерешенный. (поскольку до окончания основной транзакции невозможно сказать, будет этот номер использован или нет). В момент окончания или отката основной транзакции, запускается обработчик, который эти номера помечает как использованные или неиспользованные. Когда система пытается выделить новый номер, прежде чем увеличивать основной счетчик, система ищет в табличке уже выделенных значений, строки помеченные как Свободный.
Там еще есть механизм, который позволяет непрерывными номерными сериями пользоваться не из транзакции. Можно просто выделить номер и позже его через API пометить как используемый или неиспользуемый....
|