Dirty Read

-- TA 1
SELECT preis FROM produkte
WHERE produktnr = 17; -- 0,89 EUR
 
UPDATE produkte 
SET preis = 0
WHERE produktnr = 17;           -- TA 2
                                SELECT preis FROM produkte
ROLLBACK;                       WHERE produktnr = 17; -- 0 EUR
                                COMMIT;

Lost Update

-- TA 1                         -- TA 2
UPDATE produkte                 UPDATE produkte 
SET preis = preis + 1           SET preis = preis + 1
WHERE produktnr = 17;           WHERE produktnr = 17;
 
-- Eigentlich müsste das Produkt jetzt 2 teurer sein. Eine TA ist
-- aber verloren gegangen und es ist nur 1 teurer.
  • Im SQL-Standard ist festgelegt, dass DBMS Lost Updates unterbinden müssen, heißt ein Lost Update taucht normalerweise nie auf.

Non-repeatable read

-- TA 1
SELECT preis 
FROM produkte
WHERE produktnr = 17;
-- 0,89 EUR
                                -- TA 2
								UPDATE produkte 
								SET preis = preis + 0.1
								WHERE produktnr = 17;
								COMMIT;
SELECT preis 
FROM produkte
WHERE produktnr = 17;
-- 0,99 EUR
 
COMMIT;

Phantomproblem

-- TA 1
SELECT * FROM namen;
-- 2 Namen werden angezeigt     -- TA 2
								INTO namen VALUES ('peter');
						        COMMIT;
SELECT COUNT(*) FROM namen;
-- 3
COMMIT;