Se você não reverter uma transação, a alteração ainda será feita?

10

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?

Josh Stevenson
fonte
Eu acho que depende do comportamento do software cliente que você usa para executar essas instruções ou o aplicativo em que elas estão incorporadas. Alguns podem confirmar automaticamente se configurados (o SSMS fará isso por padrão).
mustaccio
3
As transações explicitamente declaradas não são confirmadas automaticamente. Desde que Josh declarou o início de uma transação, ele se comportará exatamente como Justin Cave respondeu.
Dave

Respostas:

16

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.

Se eu não reverter a transação, essas alterações ainda serão feitas

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_transactionsou usar DBCC 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?

Kin Shah
fonte
@ JoshStevenson Acho que vale a pena ler sobre as Operações Atômicas no contexto do banco de dados.
Nelz 07/08
12

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 commitou a rollbackou 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.

Justin Cave
fonte
Esta é a resposta correta. Sem essa informação, não fazia sentido para mim que as instruções COMMIT e ROLLBACK fossem totalmente utilizadas.
Tarec 6/02
1

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.

Mitesh bisht
fonte