Supposons que j'exécute une requête
begin tran
update users
set name = 'Jimmy'
where name = 'john'
Si je ne annule pas la transaction, ces modifications seront-elles toujours apportées, provoquera-t-elle une erreur ou agira-t-elle de toute façon comme une annulation?
sql-server
Josh Stevenson
la source
la source
Réponses:
Vous devez comprendre ce qu'est une transaction - il s'agit d'une seule unité de travail. Il est TOUT ou RIEN (suit les propriétés ACID ) et cela garantit la cohérence de la base de données.
Les modifications ne seront apportées que si vous vous engagez. Le serveur SQL enregistrera toutes les modifications apportées au journal des transactions et une fois que vous vous engagez, elles sont renforcées dans le fichier de données.
Si vous ne vous engagez pas, votre transaction restera OUVERTE indéfiniment - que vous pouvez voir
sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactions
ou utiliserDBCC OPENTRAN
.En outre, ce que vous avez lancé est une transaction explicite , qui doit être explicitement terminée par une instruction COMMIT ou ROLLBACK.
Lire aussi - Est-ce une mauvaise pratique de toujours créer une transaction?
la source
Si vous ne validez ni annulez la transaction, la transaction continuera d'exister indéfiniment. Il continuera à maintenir ses verrous, bloquant potentiellement d'autres sessions, jusqu'à ce que vous mettiez fin à la transaction via un
commit
ou unrollback
ou jusqu'à ce qu'un DBA arrive et tue la session (ou jusqu'à ce que quelque chose comme un hoquet réseau entraîne l'échec de la connexion). Si un administrateur de base de données tue la session, il émettra implicitement une restauration pour cette transaction et pour toute autre transaction ouverte.la source
Aucune modification ne sera apportée tant que la transaction n'aura pas été validée, tout ou rien comme mentionné ci-dessus,
L'atomicité est la raison derrière cela. Vous pouvez vérifier les propriétés de transaction ACID, ses propriétés fondamentales qu'un système de base de données suit.
la source