Motor: InnoDB company_id ist in diesem Fall der Primärschlüssel. Wenn ich die folgende SQL-Instanz ausführen, werden nur die ausgewählten Zeilen gesperrt:
select * from company where company_id = 1 for update
=> 1 Zeile gesperrt
select * from company where company_id in (1, 2) for update
=> 2 Zeilen gesperrt
Wenn die Bedingungsnummer jedoch fünf beträgt, wird die gesamte Tabelle von sqls gesperrt:
SELECT
*
FROM
company
WHERE
company_id = 1
OR company_id = 2
OR company_id = 3
OR company_id = 4
OR company_id = 5
FOR UPDATE
=> Tabelle gesperrt
SELECT
*
FROM
company
WHERE
company_id IN (1, 2, 3, 4, 5)
FOR UPDATE
=> Tabelle gesperrt
Gibt es eine Möglichkeit, mehrere Datensätze mit nur einer Abfrage (mit mehreren Bedingungen) zu sperren?
==================== FRAGE BEHOBEN ============================== =
Es tut mir leid, dass ich das "for update" beim ersten Bearbeiten der Frage verpasst habe.
Antworten:
1 für die Antwort № 1Ich glaube nicht, dass der Befehl select die von Ihnen ausgewählten Zeilen sperrt https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html, Sie sollten SELECT ... FOR UPDATE verwenden, um die Zeilen zu sperren.