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
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:
Warum also kann die zweite Transaktion die Phantomdaten abrufen, obwohl die erste Transaktion noch nicht abgeschlossen ist?