Supposons que j'ai une question:
begin tran
-- some other sql code
Et puis j'oublie de m'engager ou de revenir en arrière.
Si un autre client tente d'exécuter une requête, que se passe-t-il?
sql-server
transactions
commit
Charbel
la source
la source
Vous pouvez en fait essayer vous-même, cela devrait vous aider à comprendre comment cela fonctionne.
Ouvrez deux fenêtres (onglets) dans le studio de gestion, chacune d'elles aura sa propre connexion à SQL.
Vous pouvez maintenant commencer une transaction dans une fenêtre, faire des choses comme insérer / mettre à jour / supprimer, mais pas encore valider. puis dans l'autre fenêtre, vous pouvez voir à quoi ressemble la base de données de l'extérieur de la transaction. En fonction du niveau d'isolement, la table peut être verrouillée jusqu'à ce que la première fenêtre soit validée, ou vous pouvez (ne pas) voir ce que l'autre transaction a fait jusqu'à présent, etc.
Jouez avec les différents niveaux d'isolation et sans indice de verrouillage pour voir comment ils affectent les résultats.
Voir également ce qui se passe lorsque vous lancez une erreur dans la transaction.
Il est très important de comprendre comment tout cela fonctionne ou vous serez déconcerté par ce que fait sql, plusieurs fois.
S'amuser! GJ.
la source
Les transactions sont destinées à s'exécuter complètement ou pas du tout. La seule façon de terminer une transaction est de valider, toute autre méthode entraînera une annulation.
Par conséquent, si vous commencez et que vous ne vous engagez pas, il sera annulé à la fermeture de la connexion (car la transaction a été interrompue sans être marquée comme terminée).
la source
dépend du niveau d'isolement de la transaction entrante.
Explication de l'isolement des transactions SQL
la source
Lorsque vous ouvrez une transaction, rien n'est verrouillé par lui-même. Mais si vous exécutez certaines requêtes à l'intérieur de cette transaction, en fonction du niveau d'isolement, certaines lignes, tables ou pages sont verrouillées, ce qui affectera d'autres requêtes qui tentent d'y accéder à partir d'autres transactions.
la source
Exemple de transaction
commencer tran tt
Vos instructions SQL
si une erreur s'est produite, rollback tran tt else commit tran tt
Tant que vous n’avez pas exécuté la validation de validation, les données ne seront pas modifiées
la source
BEGIN TRAN X ... BEGIN TRAN Y ... ROLLBACK Y
ne fonctionne pas, par exemple. Voir stackoverflow.com/questions/1273376/…En plus des problèmes de verrouillage potentiels que vous pourriez causer, vous constaterez également que vos journaux de transactions commencent à augmenter car ils ne peuvent pas être tronqués au-delà du LSN minimum pour une transaction active et si vous utilisez l'isolement de snapshot, votre magasin de versions dans tempdb augmentera pendant raisons similaires.
Vous pouvez utiliser
dbcc opentran
pour voir les détails de la transaction ouverte la plus ancienne.la source
Toute transaction non effectuée laissera le serveur verrouillé et les autres requêtes ne s'exécuteront pas sur le serveur. Vous devez soit annuler la transaction, soit la valider. La fermeture de SSMS mettra également fin à la transaction, ce qui permettra à d'autres requêtes de s'exécuter.
la source
Le comportement n'est pas défini, vous devez donc définir explicitement un commit ou un rollback:
http://docs.oracle.com/cd/B10500_01/java.920/a96654/basic.htm#1003303
Hsqldb effectue une restauration
le résultat est
la source