Каков результат при вызове BEGIN TRANS, но не при вызове COMMIT, ROLLBACK или END TRANS?

В явной транзакции, если я начну транзакцию, указав BEGIN TRANS, но если я не укажу COMMIT, ROLLBACK или END TRANS, что произойдет с приложением?


person savitha    schedule 25.06.2009    source источник
comment
очень плохое название... попробуйте что-нибудь более описательное   -  person Sam Saffron    schedule 25.06.2009


Ответы (4)


ничего - транзакция все еще продолжается. Если вы разрываете соединение, оно откатывается.

person Hafthor    schedule 25.06.2009

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

В какой-то момент, так или иначе, транзакция должна быть завершена. Когда что-то пойдет не так (например, приложение завершилось), оно будет отменено, если только вы не зафиксируете его первым.

person Nader Shirazie    schedule 25.06.2009

Если приложение завершает работу, соединение неявно закрывается и выполняется откат.

Если приложение работает на сервере приложений (например, ASPNET, сервере приложений Java и т. д.), то соединение, вероятно, возвращается в пул, где, как мы надеемся, оно сбрасывается перед повторным использованием, и транзакция в конечном итоге откатывается (но, возможно, не сразу). ).

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

Будьте осторожны с открытыми транзакциями слишком долго - вы заблокируете (если вы что-то изменили) и предотвратите очистку старых строк, что может иметь очень пагубные последствия для базы данных с большим количеством "оттока".

person MarkR    schedule 25.06.2009

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

/Хакан Винтер

person Hakan Winther    schedule 25.06.2009