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?
sql-server
Josh Stevenson
fuente
fuente
Respuestas:
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.
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_transactions
o usarDBCC 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?
fuente
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
commit
o unarollback
o 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.fuente
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.
fuente