InnoDB setzt spezifische Arten von Sperren wie folgt.
-
SELECT ... FROM ist ein konsistenter Lesevorgang, der einen Snapshot der Datenbank liest und keine Sperren setzt, es sei denn, die Transaktionsisolationsstufe ist auf SERIALIZABLE festgelegt. Für die Stufe SERIALIZABLE setzt die Suche gemeinsam genutzte Next-Key-Sperren auf die gefundenen Indexdatensätze.
-
SELECT ... FROM ... LOCK IN SHARE MODE setzt gemeinsam genutzte Next-Key-Sperren auf alle Indexdatensätze, auf die die Suche stößt.
-
Für Indexdatensätze, auf die die Suche stößt, blockiert SELECT ... FROM ... FOR UPDATE andere Sitzungen daran, SELECT ... FROM ... LOCK IN SHARE MODE auszuführen oder bestimmte Transaktionsisolationsstufen einzulesen. Konsistente Lesevorgänge ignorieren alle Sperren, die für die Datensätze gesetzt wurden, die in der Leseansicht vorhanden sind.
-
UPDATE ... WHERE ... setzt eine exklusive Next-Key-Sperre für jeden Datensatz, auf den die Suche stößt.
-
DELETE FROM ... WHERE ... setzt eine exklusive Next-Key-Sperre für jeden Datensatz, auf den die Suche stößt.
-
INSERT setzt eine exklusive Sperre für die eingefügte Zeile. Diese Sperre ist eine Index-Record-Sperre, keine Next-Key-Sperre (d. h. es gibt keine Lückensperre) und verhindert nicht, dass andere Sitzungen in die Lücke vor der eingefügten Zeile eingefügt werden.
InnoDB hat mehrere Arten von Sperren auf Datensatzebene:
-
Datensatzsperre:Dies ist eine Sperre für einen Indexdatensatz.
-
Lückensperre:Dies ist eine Sperre für eine Lücke zwischen Indexdatensätzen oder eine Sperre für die Lücke vor dem ersten oder nach dem letzten Indexdatensatz.
-
Next-Key-Sperre:Dies ist eine Kombination aus einer Datensatzsperre für den Indexdatensatz und einer Lückensperre für die Lücke vor dem Indexdatensatz.
Mehr anzeigen :
Vermeiden des Phantomproblems mit Next-Key-Locking