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:
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.
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.
Tags und Links mysql