RSS DEV-Gemeinschaft

Die Mechanik von SELECT FOR UPDATE in SQL

`SELECT FOR UPDATE` ist ein Mechanismus zur Zeilen-Sperrung in SQL, der die in einer Transaktion abgerufenen Zeilen sperrt und verhindert, dass andere Transaktionen diese Zeilen modifizieren oder Sperren auf diesen Zeilen erwerben. Sein Zweck ist die Sicherstellung von Datenkonsistenz, häufig verwendet in Szenarien, in denen die Datenintegrität aufrechterhalten werden muss. In MySQL ist die Implementierung von `SELECT FOR UPDATE` eng mit der Storage Engine verknüpft, z. B. InnoDB, die Zeilensperren verwendet, um die Zielzeilen zu sperren. Dieser Sperrmechanismus setzt exklusive Sperren auf die von der Abfrage abgerufenen Zeilen und verhindert, dass andere Transaktionen diese Zeilen modifizieren oder gemeinsame oder exklusive Sperren darauf setzen. `SELECT FOR UPDATE` muss innerhalb einer Transaktion verwendet werden und ist nur effektiv, wenn eine Transaktionen unterstützende Storage Engine verwendet wird. Sind die Zielzeilen bereits von einer anderen Transaktion gesperrt, so geht die aktuelle Transaktion in einen Wartezustand, bis die Sperre freigegeben wird oder ein Timeout auftritt. Die InnoDB Storage Engine implementiert die Zeilensperrung über Indizes, und `SELECT FOR UPDATE` sperrt alle Zeilen, die die Abfragebedingung erfüllen. Der Sperrvorgang beinhaltet das Setzen einer exklusiven Sperre auf jede gescannte Zeile, und wenn eine Zeile bereits von einer anderen Transaktion gesperrt ist, wartet die aktuelle Transaktion, bis diese Sperre freigegeben wird. Die Verwendung von Indizes ist entscheidend für die Optimierung von `SELECT FOR UPDATE`, da Abfragen, die Indizes verwenden, Zeilensperren anwenden und eine Herabstufung auf Tabellenebenen-Sperren vermeiden.
favicon
dev.to
The Mechanics of SELECT FOR UPDATE in SQL
Bild zum Artikel: Die Mechanik von SELECT FOR UPDATE in SQL
Create attached notes ...