Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SELECT FOR UPDATE hält die gesamte Tabelle in MySQL statt Zeile für Zeile

Die Standardisolationsstufe für InnoDB-Tabellen ist wiederholbares Lesen. Wenn diese Isolationsstufe aktiv ist, erhalten wir folgendes Verhalten (Zitat aus:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

Mit anderen Worten:Könnten Sie versuchen, den Primärschlüssel in der WHERE-Bedingung des SELECT zu verwenden? Also zum Beispiel statt:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;

Versuchen Sie:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;

falls id der Primärschlüssel ist. Jede andere Spalte mit einem eindeutigen Index würde auch funktionieren. Wenn Sie nicht eindeutige Spalten in Ihrer WHERE-Klausel verwenden, sperrt InnoDB eine Reihe von Zeilen.