Ich versuche derzeit Transaktionsisolation in MySQL zu verstehen, lesen Sie das Buch High Performance MySQL, 2nd Edition.Read Committed Vs wiederholbare Lesevorgänge in MySQL?
Und hier sind ihre Erklärung dieser beiden Transaktion Isolationsstufe.
READ COMMITTED
Die Standardisolationsstufe für die meisten Datenbanksysteme (aber nicht MySQL!) Ist Committed Read. Es erfüllt die einfache Definition der Isolation früher verwendet: eine Transaktion wird nur diese Änderungen von Transaktionen, die bereits festgeschrieben wurden, wenn es begann begann, und seine Änderungen werden für andere sichtbar sein, bis es committed hat. Dieser Level erlaubt immer noch das, was man als nicht wiederholbares lesen kann. Das bedeutet, dass Sie die gleiche Anweisung zweimal ausführen können und verschiedene Daten sehen können: .
WIEDERHOLBARE READ
WIEDERHOLBARE READ löst die Probleme, die UNCOMMITTED LESEN ermöglicht. Es garantiert, dass alle Zeilen, die eine Transaktion liest, bei nachfolgenden Lesevorgängen innerhalb der gleichen Transaktion " " gleich aussehen, aber theoretisch erlaubt es noch ein weiteres kniffliges Problem: Phantom-Lesevorgänge. Einfach gesagt, ein Phantom lesen kann passieren, wenn Sie einen Bereich von Zeilen auswählen, fügt eine andere Transaktion eine neue Zeile in den Bereich, und dann Sie wieder den gleichen Bereich auswählen; Sie sehen dann die neue Zeile "Phantom" . InnoDB und Falcon lösen das Phantom-Leseproblem mit multiversion concurrency control, das wir später in diesem Kapitel erklären. REPEATABLE READ ist die Standard-Transaktionsisolation von MySQL. Die InnoDB- und Falcon-Speicher-Engines berücksichtigen diese Einstellung , die Sie in Kapitel 6 lernen werden. Einige andere Speicher-Engines tun dies auch, aber die Wahl liegt bei der Engine.
Fragen:
1- In READ COMMITTED wenn diese Isolationsstufe bedeutet, dass Transaktion nur Änderungen sehen kann, die von anderen Transaktionen begangen wurde, wie während der gleichen Transaktion kommen, wenn Sie gleiche Anweisung ausführen Sie können verschiedene Ergebnisse sehen? Bedeutet das Folgendes?
START TRANSACTION;
SELECT balance FROM checking WHERE customer_id = 10233276;
UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
# >>> NEXT I MUST SEE THE NEW BALANCE, OR I AM WRONG ?
SELECT balance FROM checking WHERE customer_id = 10233276;
COMMIT;
2- In WIEDERHOLBARE READ wenn diese Isolationsstufe allowes Phantom lesen, wie kommt es, dass alle Zeilen GARANTIEN ein transactin liest, wird „gleich aussehen“ in den nachfolgenden liest? Liest der Phanton nicht die Garantie dieses Niveaus?