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?
sql-server
Josh Stevenson
quelle
quelle
Antworten:
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.
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_transactions
oder verwenden könnenDBCC 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?
quelle
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
commit
oder a beendenrollback
oder 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.quelle
Ä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.
quelle