Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was macht eine Transaktion rund um eine einzelne Anweisung?

Es tut nichts. Alle einzelnen SQL-Anweisungen (mit seltenen Ausnahmen wie Masseneinfügungen ohne Protokoll oder Truncate Table) sind automatisch "in einer Transaktion", ob Sie dies ausdrücklich sagen oder nicht (selbst wenn sie Millionen von Zeilen einfügen, aktualisieren oder löschen). .

BEARBEITEN:basierend auf dem Kommentar von @Phillip unten ... In aktuellen Versionen von SQL Server schreiben Even Bulk Inserts und Truncate Table einige Daten in das Transaktionsprotokoll, wenn auch nicht so viel wie bei anderen Operationen. Der entscheidende Unterschied aus transaktionaler Sicht besteht darin, dass bei diesen anderen Arten von Operationen die Daten in Ihren Datenbanktabellen, die geändert werden, nicht in einem Zustand im Protokoll sind, der ein Zurücksetzen zulässt.

Dies bedeutet lediglich, dass die Änderungen, die die Anweisung an Daten in der Datenbank vornimmt, im Transaktionsprotokoll protokolliert werden, sodass sie rückgängig gemacht werden können, wenn die Operation fehlschlägt.

Die einzige Funktion, die die Befehle „Begin Transaction“, „Commit Transaction“ und „RollBack Transaction“ bieten, besteht darin, Ihnen zu ermöglichen, zwei oder mehr einzelne SQL-Anweisungen in dieselbe Transaktion einzufügen.

BEARBEITEN:(um den Kommentar von Marks zu verstärken ...) JA, dies könnte auf "abergläubische" Programmierung zurückzuführen sein, oder es könnte ein Hinweis auf ein grundlegendes Missverständnis der Natur von Datenbanktransaktionen sein. Eine wohlwollendere Interpretation ist, dass es einfach das Ergebnis einer übermäßigen Anwendung von Konsistenz ist, die unangemessen ist, und noch ein weiteres Beispiel für Emersons Euphemismus, dass:

Eine törichte Konsistenz ist der Hobgoblin kleiner Geister,
verehrt von kleinen Staatsmännern und Philosophen und Geistlichen