Frage

Hier ist meine gewünschte Transaktion Bestellung:

  1. User1 Auswahlfeld, führt den Betrieb, Update mit neuem Wert.
  2. User2 Auswahlfeld, führt den Betrieb, Update mit neuem Wert.
  3. User3 Auswahlfeld, führt den Betrieb, Update mit neuem Wert.

Von dem, was ich verstehen die wählen Sie zunächst nur eine Schreibsperre durchführen, während die zweite lesen perform und Schloss schreiben.

Beide scheint brauchbar, aber im ersten Fall, welcher Wert wird User2 lesen? Der Anfangswert vor User1-Updates oder den Wert nach Benutzer1 Updates (das ist, was ich will)?

Also ich verwirrt bin, soll ich SELECT ... FOR UPDATE oder SELECT ... LOCK IN SHARE MODE?

War es hilfreich?

Lösung

Sie wollen wahrscheinlich FOR UPDATE verwenden.

Mit „LOCK IN SHARE MODE“ der zweite Benutzer noch in der Lage sein, den Wert zu lesen, bevor sie aktualisiert wurde.

Von der MySQL-Dokumentation:

  

Wenn Sie FOR UPDATE mit einem Speicher verwenden   Motor, der Seite oder Zeilensperren verwendet,   Zeilen, die von der Abfrage geprüft sind   bis zum Ende der Schreib-locked   aktuelle Transaktion. Mit LOCK IN   SHARE MODE setzt eine gemeinsame Sperre, die   andere Transaktionen ermöglicht es dem lesen   sucht Reihen aber nicht zu aktualisieren oder   löschen.

Also auch wenn LOCK IN SHARE MODE ein Update verhindert, wenn Sie den Betrieb auf dem gelesenen Wert abhängt, kann man in einem inkonsistenten Zustand enden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top