ja, die eine in der Transaktion kann von anderen früheren Insert/Update/Delete-Anweisungen in dass Transaktion, A Select-Anweisung außerhalb der Transaktion vorgenommenen Änderungen nicht sehen kann ....
Wenn alles, was Sie fragen Über was ist die Isolation Level, dann verstehen - dass alle Select-Anweisungen (hey, alle Aussagen aller Art), - sind in einer Transaktion. Der einzige Unterschied zwischen einem, der explizit in einer Transaktion steht, und einem, der eigenständig steht, ist, dass derjenige, der alleine steht, seine Transaktion unmittelbar vor seiner Ausführung startet und unmittelbar nach der Ausführung festschreibt oder einen Rollback durchführt,
während derjenige, der explizit in einer Transaktion ist, kann (weil es eine Begin Transaction-Anweisung hat) andere Anweisungen (Einfügungen/Updates/Löschungen, was auch immer) innerhalb der gleichen Transaktion vor oder nach dieser Select-Anweisung auftreten.
Unabhängig davon, auf welche Isolationsstufe gesetzt wird, befinden sich beide Selects (innerhalb oder außerhalb einer expliziten Transaktion) dennoch in einer Transaktion, die auf dieser Isolationsstufe arbeitet.
Addition: Folgendes ist für SQL Server, aber alle Datenbanken müssen auf die gleiche Weise funktionieren. In SQL Server befindet sich der Abfrageprozessor immer in einem von drei Transaktionsmodi: AutoCommit, Implizit oder Explizit.
AutoCommit ist der Standardmodus für die Transaktionsverwaltung des SQL Server-Datenbankmoduls. .. Jede Transact-SQL-Anweisung wird festgeschrieben oder zurückgesetzt, wenn sie abgeschlossen ist. ... Wenn eine Anweisung erfolgreich abgeschlossen wurde, wird sie festgeschrieben. Wenn ein Fehler auftritt, wird ein Rollback ausgeführt. Dies ist die Standardeinstellung und ist die Antwort auf die Frage von @ Alex in den Kommentaren.
in Implicit Transaction Modus“... der SQL Server-Datenbank-Engine automatisch startet eine neue Transaktion, nachdem die aktuelle Transaktion festgeschrieben wird oder zurückgerollt Sie nichts tun, den Beginn einer Transaktion zu beschreiben;. Sie begehen oder Roll Jede implizite Transaktion generiert eine fortlaufende Transaktionskette ... "Beachten Sie, dass das kursive Snippet für jede Transaktion gilt, unabhängig davon, ob es sich um eine Transaktion mit einer oder mehrere Anweisungen handelt.
Die Engine wird im Explicit Transaction-Modus platziert, wenn Sie explizit eine Transaktion mit BEGIN TRANSACTION
Statement initiieren. Dann wird jede Anweisung innerhalb dieser Transaktion ausgeführt, bis Sie die Transaktion explizit beenden (mit COMMIT
oder ROLLBACK
) oder wenn ein Fehler auftritt, der dazu führt, dass die Engine beendet und zurückgesetzt wird.
Ich glaube, er fragt, ob es einen Unterschied gibt zwischen: "select ..." und "start transaction; select ...; stop transaction;" – tster
Sehr gut gesagt! –
Große Antwort. Ich war auf der Suche nach dieser Information – Davita