Documentation:LOCK IN SHARE MODE sperrt gesamte Tabelle
SELECT ... LOCK IN SHARE MODE setzt einen gemeinsamen Modus Sperre auf alle Zeilen, die zu lesen sind. Andere Sitzungen können die Zeilen lesen, aber sie können sie erst ändern, wenn Ihre Transaktion festgeschrieben wird. Wenn eine dieser Zeilen von einer anderen Transaktion geändert wurde, die noch nicht festgeschrieben wurde, wartet Ihre Abfrage bis zum Ende dieser Transaktion und verwendet dann die neuesten Werte.
Einige Experimente deuten jedoch darauf hin, dass es mehr als die gelesenen Zeilen sperrt.
CREATE TABLE example (a int);
START TRANSACTION;
SELECT a FROM example WHERE a = 0 LOCK IN SHARE MODE;
Und dann auf eine andere Verbindung
INSERT INTO example VALUES (1);
Die späteren Anschlussblöcke auf das Schloss.
Es scheint, dass LOCK IN SHARE MODE
mehr als "alle Zeilen, die gelesen werden" sperrt.
Was genau funktioniert LOCK IN SHARE MODE
sperren?