Wenn Sie eine Transaktion nicht zurücksetzen, wird die Änderung trotzdem vorgenommen?

10

Angenommen, ich führe eine Abfrage aus

begin tran

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

Wenn ich die Transaktion NICHT zurücksetze, werden diese Änderungen dann noch vorgenommen, wird ein Fehler ausgegeben oder wird sie trotzdem als Rollback ausgeführt?

Josh Stevenson
quelle
Ich denke, das hängt vom Verhalten der Client-Software ab, mit der Sie diese Anweisungen ausführen, oder von der Anwendung, in die sie eingebettet sind. Einige werden möglicherweise automatisch festgeschrieben, wenn sie konfiguriert sind (SSMS übernimmt dies standardmäßig).
Mustaccio
3
Explizit deklarierte Transaktionen werden nicht automatisch festgeschrieben. Da Josh den Beginn einer Transaktion erklärt hat, verhält sie sich genau so, wie Justin Cave geantwortet hat.
Dave

Antworten:

16

Sie müssen verstehen, was eine Transaktion ist - es ist eine einzelne Arbeitseinheit. Es ist ALLES oder NICHTS (folgt den ACID-Eigenschaften ) und dies garantiert die Datenbankkonsistenz.

Wenn ich die Transaktion NICHT zurücksetze, werden diese Änderungen weiterhin vorgenommen

Die Änderungen werden nur vorgenommen, wenn Sie sich verpflichten. SQL Server zeichnet alle Änderungen am Transaktionsprotokoll auf und sobald Sie sie festschreiben, werden sie in der Datendatei gespeichert.

Wenn Sie keine Festschreibung vornehmen, bleibt Ihre Transaktion auf unbestimmte Zeit geöffnet - was Sie in sehen sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionsoder verwenden können DBCC OPENTRAN.

Außerdem haben Sie eine explizite Transaktion initiiert , die explizit mit einer COMMIT- oder ROLLBACK-Anweisung beendet werden sollte.

Lesen Sie auch - Ist es eine schlechte Praxis, immer eine Transaktion zu erstellen?

Kin Shah
quelle
@JoshStevenson Ich denke, es lohnt sich, über Atomic Operations im Datenbankkontext zu lesen .
Nelz
12

Wenn Sie die Transaktion weder festschreiben noch zurücksetzen, bleibt die Transaktion auf unbestimmte Zeit bestehen. Es sperrt weiterhin seine Sperren und blockiert möglicherweise andere Sitzungen, bis Sie entweder die Transaktion über a commitoder a beenden rollbackoder bis ein DBA die Sitzung beendet (oder bis die Verbindung durch einen Netzwerk-Schluckauf fehlschlägt). Wenn ein DBA die Sitzung beendet, gibt er implizit ein Rollback für diese und andere offene Transaktionen aus.

Justin Cave
quelle
Dies ist die richtige Antwort. Ohne diese Information machte es für mich keinen Sinn, die Anweisungen COMMIT und ROLLBACK insgesamt zu verwenden.
Tarec
1

Änderungen werden erst vorgenommen, wenn die Transaktion festgeschrieben wurde und alles oder nichts, wie oben erwähnt, antwortet.

Atomarität ist der Grund dafür. Sie können die ACID-Transaktionseigenschaften überprüfen. Dies sind die grundlegenden Eigenschaften, denen ein Datenbanksystem folgt.

Mitesh Bisht
quelle