Digamos que estou executando uma consulta
begin tran
update users
set name = 'Jimmy'
where name = 'john'
Se NÃO reverter a transação, essas alterações ainda serão feitas, gerará um erro ou atuará como uma reversão?
sql-server
Josh Stevenson
fonte
fonte
Respostas:
Você precisa entender o que é uma transação - é uma única unidade de trabalho. É TUDO ou NADA (segue as propriedades ACID ) e isso garante a consistência do banco de dados.
As alterações serão feitas apenas se você confirmar. O servidor SQL registrará todas as alterações no log de transações e, depois que você confirmar, elas serão protegidas no arquivo de dados.
Se você não confirmar, sua transação permanecerá ABERTA indefinidamente - o que você pode ver
sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactions
ou usarDBCC OPENTRAN
.Além disso, o que você iniciou é uma transação explícita , que deve ser explicitamente finalizada com uma instrução COMMIT ou ROLLBACK.
Leia também - É uma prática ruim sempre criar uma transação?
fonte
Se você não confirmar nem reverter a transação, a transação continuará a existir indefinidamente. Ele continuará mantendo seus bloqueios, potencialmente bloqueando outras sessões, até que você finalize a transação por meio de um
commit
ou arollback
ou até que um DBA apareça e termine a sessão (ou até que algo como um soluço de rede cause falha na conexão). Se um DBA matar a sessão, ele implicitamente emitirá uma reversão para esta e qualquer outra transação aberta.fonte
As alterações não serão feitas até que, a menos que a transação seja confirmada, tudo ou nada, como mencionado acima,
A atomicidade é a razão por trás disso. Você pode verificar as propriedades da transação ACID, são as propriedades fundamentais que um sistema de banco de dados segue.
fonte