Mam tabelę dane, która ma dwa atrybuty - x i y, ponad milion wierszy, początkowo wszystkie równe zeru. Następnie dwóch użytkowników równocześnie będzie wykonywało następujące transakcje:
T1 wykonuje user1
START TRANSACTION;
UPDATE dane SET x=2;
COMMIT;
T2 wykonuje user2
START TRANSACTION;
UPDATE dane SET y=100 WHERE x=2;
COMMIT;
Przy czym T1 zacznie się wykonywać ok. sekundę przed T2. Oczekiwałbym, że na atrybucie y pozostaną zera - T2 nie widzi aktualizacji wprowadzonych przez T1 (a taki update trwa ok. 30 sekund), tzn. na atrybucie x widzi same zera zatem update z T2 zawsze zawiedzie.
Ale tak się jednak nie dzieje, co bardzo mnie dziwi - może mi ktoś wyjaśnić dlaczego?