/ / MySQL - Datensatzsperren bei Abfrage mit mehreren Bedingungen - MySQL, SQL

MySQL - speichert Sperren für Abfragen mit mehreren Bedingungen - mysql, sql

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 № 1

Ich 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.