Sie müssen der id
einen Index hinzufügen Spalte, um sicherzustellen, dass Sie eine Sperre auf Zeilenebene erhalten. SELECT ... FOR UPDATE
sperrt alle Zeilen, die gelesen werden, um die Abfrage auszuführen, nicht nur die tatsächlich ausgewählten Zeilen. Ohne einen Index muss es einen vollständigen Tabellenscan durchführen, sodass jede Zeile als Ergebnis gesperrt wird.
Bei einem Index setzt er einfach eine Sperre in diesen Indexeintrag, er muss keine anderen Zeilen lesen, also werden keine anderen Zeilen gesperrt.