/ / MySQL - rekord blokuje zapytanie o wiele warunków - mysql, sql

MySQL - rekord blokuje zapytanie o wiele warunków - mysql, sql

Silnik: InnoDB company_id jest kluczem podstawowym w tym przypadku. Po uruchomieniu następującego sql, blokuje tylko wiersze, które są wybrane:

select * from company where company_id = 1 for update

=> 1 wiersz zablokowany

select * from company where company_id in (1, 2) for update

=> 2 wiersze zablokowane

Ale gdy liczba warunków zwiększy się do pięciu, sqls wyglądają tak, zablokuje cały stół:

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

=> tabela zablokowana

SELECT
*
FROM
company
WHERE
company_id IN (1, 2, 3, 4, 5)
FOR UPDATE

=> tabela zablokowana

Czy istnieje sposób blokowania wielu rekordów za pomocą tylko jednego zapytania (z wieloma warunkami)?

=================== PYTANIE NAPRAWIONE ============================= =

Przykro mi, że przegapiłem "aktualizację" podczas pierwszej edycji pytania.

Odpowiedzi:

1 dla odpowiedzi № 1

Nie sądzę, że polecenie select zablokuje wybrane wiersze. Według dokumentu https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.htmlNależy użyć polecenia WYBIERZ ... DO AKTUALIZACJI, aby zablokować wiersze.