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