Ist MySQL Query mit Unterabfrage atomar?

9

Es gibt zwei Tabellen:

Tabelle 1 eindeutige Sitzungen

%Vor%

Tabelle 2 (Sitzungen)

%Vor%

Ich möchte count nur aktualisieren, wenn name nicht in Sitzungen vorhanden ist, um einmalige Sitzungen zu zählen. Dies ist ein Beispiel, so dass es nicht auf alternative Weise gemacht werden soll, aber die Frage ist:

%Vor%

Wird zuerst eine atomare Abfrage abgefragt? Wenn ja, dann gibt es kein Problem.

Wenn nein, was passiert, wenn mehrere Threads ausgeführt werden, um die oben genannten Operationen auszuführen? Es gibt eine Chance, dass:

Thread 1: Anzahl gibt 0 zurück, es hat Tabelle 1, aber nicht Tabelle 2 aktualisiert, bevor Thread 2 gestartet wird. Thread 2: Es findet Count 0, es wird auch Count update.

Nun gilt für denselben Benutzer der Wert 2, was nicht passieren sollte.

Irgendein Vorschlag / Feedback.

    
Navin 28.04.2011, 08:53
quelle

1 Antwort

1

Das hängt von der Speicher-Engine ab, die Sie verwenden.

Ihr Beispiel funktioniert nur mit MySQL-Engines, die Transaktionen unterstützen, wie InnoDB, da es die Transaktionsverarbeitung (und die Lesekonsistenz auf Anweisungsebene) korrekt implementiert.

MyISAM unterstützt keine Transaktionen.

    
a_horse_with_no_name 28.04.2011 09:01
quelle

Tags und Links