Si vous n'annulez pas une transaction, la modification sera-t-elle toujours effectuée?

10

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?

Josh Stevenson
la source
Je suppose que cela dépend du comportement du logiciel client que vous utilisez pour exécuter ces instructions ou de l'application où elles sont intégrées. Certains peuvent se valider automatiquement s'ils sont configurés (SSMS le fera par défaut).
mustaccio
3
Les transactions explicitement déclarées ne sont pas automatiquement validées. Puisque Josh a déclaré le début d'une transaction, elle se comportera exactement comme Justin Cave a répondu.
Dave

Réponses:

16

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.

Si je ne annule pas la transaction, ces modifications seront-elles toujours apporté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_transactionsou utiliser DBCC 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?

Kin Shah
la source
@JoshStevenson Je pense que cela vaut la peine de lire sur les opérations atomiques dans le contexte de la base de données.
Nelz
12

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

Justin Cave
la source
Telle est la bonne réponse. Sans cette information, cela n'avait aucun sens pour moi que les instructions COMMIT et ROLLBACK soient utilisées ensemble.
Tarec
1

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.

Mitesh bisht
la source