/ / MySQL - registra i blocchi sulla query con più condizioni: mysql, sql

MySQL - registra i blocchi sulla query con più condizioni - mysql, sql

Motore: InnoDB company_id è la chiave primaria in questo caso. Quando eseguo il seguente sql, blocca solo le righe selezionate:

select * from company where company_id = 1 for update

=> 1 riga bloccata

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

=> 2 righe bloccate

Ma quando il numero della condizione cresce a cinque, sql assomigliano a questi, bloccherà l'intera tabella:

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

=> tabella bloccata

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

=> tabella bloccata

C'è un modo per bloccare più record con una sola query (con più condizioni)?

=================== QUESTION FISSO ============================= =

Mi dispiace di aver perso "l'aggiornamento" mentre modificavo la domanda.

risposte:

1 per risposta № 1

Non credo che il comando select bloccherà le righe che selezioni https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html, Dovresti usare SELECT ... FOR UPDATE per bloccare le righe.