Скажите, что я выполняю запрос
begin tran
update users
set name = 'Jimmy'
where name = 'john'
Если я НЕ ОТМЕНЯЮ транзакцию, будут ли эти изменения все-таки внесены, выдаст ли ошибку или все равно будет выполнять откат?
sql-server
Джош Стивенсон
источник
источник
Ответы:
Вы должны понимать, что такое транзакция - это единая единица работы. Это ВСЕ или НИЧЕГО (следует свойствам ACID ), и это гарантирует согласованность базы данных.
Изменения будут сделаны, только если вы совершите коммит. SQL-сервер запишет все изменения в журнал транзакций, и после фиксации они будут зафиксированы в файле данных.
Если вы не сделаете коммит, то ваша транзакция останется ОТКРЫТА на неопределенный срок - что вы можете увидеть
sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactions
или использоватьDBCC OPENTRAN
.Кроме того, вы инициировали явную транзакцию , которая должна быть явно завершена оператором COMMIT или ROLLBACK.
Также прочитайте - это плохая практика всегда создавать транзакцию?
источник
Если вы не подтвердите и не откатите транзакцию, транзакция будет существовать бесконечно. Он будет продолжать удерживать свои блокировки, потенциально блокируя другие сеансы, до тех пор, пока вы не завершите транзакцию с помощью
commit
или,rollback
или пока DBA не придет и не завершит сеанс (или пока что-то вроде сетевого сбоя не вызовет сбой соединения). Если администратор базы данных убивает сеанс, он неявно выполнит откат для этой и любых других открытых транзакций.источник
Изменения не будут внесены до тех пор, пока транзакция не будет совершена, все или ничего, как указано выше, не ответит
Причиной этого является атомарность. Вы можете проверить свойства транзакции ACID, ее основные свойства, которым следует система баз данных.
источник