Ich habe versucht, den Unterschied zwischen den beiden zu verstehen. Ich werde dokumentieren, was ich in der Hoffnung gefunden habe, dass es für die nächste Person nützlich sein wird.
Sowohl LOCK IN SHARE MODE
als auch FOR UPDATE
stellen Sie sicher, dass keine andere Transaktion die ausgewählten Zeilen aktualisieren kann. Der Unterschied zwischen den beiden besteht darin, wie sie Sperren beim Lesen von Daten behandeln.
LOCK IN SHARE MODE
nicht daran hindert, eine andere Transaktion aus der gleichen Zeile zu lesen, die gesperrt wurde.
FOR UPDATE
verhindert andere Lesevorgänge in der gleichen Zeile (Lesevorgänge mit nicht schreibenden Leseoperationen können diese Zeile immer noch lesen; LOCK IN SHARE MODE
und FOR UPDATE
sind schreibende Lesevorgänge).
Dies ist wichtig, in solchen Fällen der Aktualisierung Zähler, in dem Sie Wert in 1 Anweisung lesen und den Wert in einem anderen aktualisieren. Hier können Sie mit LOCK IN SHARE MODE
2 Transaktionen den gleichen Anfangswert lesen. Wenn also der Zähler von beiden Transaktionen um 1 erhöht wurde, könnte die Endzählung nur um 1 erhöht werden, da beide Transaktionen anfänglich denselben Wert lesen.
FOR UPDATE
Verwendung würde die zweite Transaktion gesperrt haben den Wert von Lesen bis der erste getan. Dadurch wird sichergestellt, wird der Zähler um 2 erhöht
möglich Duplikat [ „FOR UPDATE“ v/s „LOCK IN SHARE MODE“: Erlaubt gleichzeitige Threads aktualisiert „Zustand“ Wert der gesperrten Zeile lesen] (http: // stackoverflow.com/questions/9037345/for-update-vs-lock-in-share-mode-allow-concurrent-threads-to-read-updated) –