4 Stimmen

Verstehen von SQL Read committed & Read uncommitted

Ich verwende SQL Server Express 2008 mit AdventureWorksLT2008 DB, um den Unterschied zwischen Read committed & Read uncommitted zu verstehen.

Laut Wikipedia: http://en.wikipedia.org/wiki/Isolation_%28database_systems%29

LESEN VERPFLICHTET

Die durch eine Abfrage abgerufenen Datensätze sind nicht an der Änderung durch andere Transaktionen.

Angenommen, es gibt eine Tabelle namens SalesLT.Adresse und eine Spalte AdresseLine2 die alle Zeilen einen leeren Wert haben

alt text

Dann führe ich diese Abfrage aus:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

BEGIN TRANSACTION   
    update SalesLT.Address set AddressLine2 = 'new value'   

        BEGIN TRANSACTION
            select AddressLine2 from SalesLT.Address 

--Break Here 
/*      
        COMMIT TRANSACTION
COMMIT TRANSACTION
*/ 

Sie sehen also, dass die erste Transaktion noch nicht übertragen wurde und die zweite bereits mit der Abfrage der Daten beginnt.

Daraus resultiert:

alt text

Warum also kann die zweite Transaktion die Phantomdaten abrufen, obwohl die erste Transaktion noch nicht abgeschlossen ist?

7voto

Will A Punkte 24412

Wenn Daten innerhalb einer Transaktion gelesen werden, sind alle Änderungen, die von dieser Transaktion vorgenommen wurden, nur innerhalb dieser Transaktion sichtbar (obwohl READ UNCOMMITTED dies ändert). Obwohl Sie also eine zweite, verschachtelte Transaktion gestartet haben, befinden Sie sich immer noch im Geltungsbereich der ersten Transaktion und können daher geänderte Daten lesen und "die geänderten Werte" erhalten.

Eine andere Transaktion, z. B. auf einer anderen SPID, würde blockiert, wenn sie READ COMMITTED verwenden und versuchen würde, diese Daten zu lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X