Ich habe versucht, dies mit MySQL Server 5.5:MySQL Wiederholtes Lesen und verlor Aktualisierung/Phantom liest
1), dass Transaktionsisolationsstufe gewährleistet REPEATABLE_READ ist
2) gestartet Shell-1, begann er eine Transaktion, dann einen Wert über ausgewählte
lesen3) begonnen shell-2 begann zu lesen, eine Transaktion in ihr, dann den gleichen Wert über ausgewählte
4) in der Schale-1, den Wert aktualisiert auf den Wert + 1 und engagierte
5) in der Schale-2, aktualisiert den Wert + 1 zu schätzen und engagiert
Der Wert verlor eines seiner Updates und wurde erst jetzt von 1.
erhöht, wie ich es, RR Anwendungen verstehen shared read locks und exclusive write locks, was bedeutet, dass die Transaktionen in # 4 und # 5 oben dead-locked sein sollten, aber das ist nicht passiert.
Also entweder mein Verständnis von RR ist fehlerhaft, oder MySQL implementiert RR auf eine andere Art und Weise. Also, was ist es?
BEARBEITEN: Durch ein ähnliches Experiment wurde auch bestätigt, dass eine RR-Transaktion (t1) keine Zeilen in dieselbe Tabelle durch eine andere RR-Transaktion (t2) eingefügt hat, wenn sie auch nach t2 eine weitere Auswahl in dieser Tabelle ausführt und bevor t1 begeht. (Hier ist der Link zu diesem Experiment: http://www.databasejournal.com/features/mysql/article.php/3393161/MySQL-Transactions-Part-II---Transaction-Isolation-Levels.htm)
Bedeutet es, dass MySQL RR kümmert sich auch um Phantom-Lesevorgänge?
Haben Sie serialisierbare Transaktionen versucht? http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html#isolevel_serializable – biziclop
Ja, und es sieht so aus, als ob MySQL serializable shared read locks und exclusive write locks verwendet und somit einen Deadlock in der oben Fall. Also bin ich wirklich verwirrt, denn hier ist, was "JP mit Hibernate" Buch sagt: "Ein System im wiederholbaren Lese-Isolationsmodus ermöglicht weder unwiederholbare liest noch Dirty Reads. Phantom-Lesevorgänge können auftreten. Lesen Transaktionen Block schreiben Transaktionen (aber nicht andere Lese-Transaktionen), und schreiben Transaktionen alle anderen Transaktionen zu blockieren. " (Seite 456) – shrini1000