Si no revierte una transacción, ¿se realizará el cambio?

10

Digamos que estoy ejecutando una consulta

begin tran

update users
set name = 'Jimmy'
where name = 'john'

Si NO revierto la transacción, ¿se seguirán realizando estos cambios, arrojará un error o actuará como una reversión de todos modos?

Josh Stevenson
fuente
Supongo que eso depende del comportamiento del software del cliente que utiliza para ejecutar estas declaraciones o la aplicación donde están incrustadas. Algunos pueden auto-confirmarse si están configurados (SSMS lo hará de forma predeterminada).
mustaccio
3
Las transacciones declaradas explícitamente no se auto-confirman. Dado que Josh ha declarado el inicio de una transacción, se comportará exactamente como Justin Cave respondió.
Dave

Respuestas:

16

Debe comprender qué es una transacción : es una sola unidad de trabajo. Es TODO o NADA (sigue las propiedades de ACID ) y esto garantiza la coherencia de la base de datos.

Si NO revierto la transacción, ¿se realizarán estos cambios?

Los cambios se realizarán solo si se compromete. El servidor SQL registrará todos los cambios en el registro de transacciones y una vez que los confirme, se endurecerán en el archivo de datos.

Si no se compromete, su transacción permanecerá ABIERTA indefinidamente, lo que puede ver sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionso usar DBCC OPENTRAN.

Además, lo que ha iniciado es una transacción explícita , que debe finalizar explícitamente con una instrucción COMMIT o ROLLBACK.

Lea también: ¿es una mala práctica crear siempre una transacción?

Kin Shah
fuente
@JoshStevenson Creo que vale la pena leer sobre Operaciones Atómicas en el contexto de la base de datos.
Nelz
12

Si no confirma ni revierte la transacción, la transacción continuará existiendo indefinidamente. Continuará manteniendo sus bloqueos, bloqueando potencialmente otras sesiones, hasta que finalice la transacción a través de una commito una rollbacko hasta que aparezca un DBA y mate la sesión (o hasta que algo así como un problema de red haga que la conexión falle). Si un DBA elimina la sesión, emitirá implícitamente una reversión para esta y cualquier otra transacción abierta.

Justin Cave
fuente
Esta es la respuesta correcta. Sin esta información, no tenía sentido para mí usar las declaraciones COMMIT y ROLLBACK por completo.
Tarec
1

Los cambios no se realizarán hasta que, a menos que se confirme la transacción, todo o nada como se menciona anteriormente responda,

La razón de esto es la atomicidad. Puede verificar las propiedades de transacción de ACID, son las propiedades fundamentales que sigue un sistema de base de datos.

Mitesh Bisht
fuente