sql >> Database >  >> RDS >> Mysql

Hoe opzettelijk een MySQL-rij vergrendelen zodat zelfs SELECT een fout retourneert?

Als u het transactie-isolatieniveau instelt op SERIALIZABLE , InnoDB wil implicie toevoegen LOCK IN SHARE MODE aan alle SELECT verklaringen.

Deze modus is in strijd met de vergrendelingen die zijn geplaatst door SELECT FOR UPDATE en de SELECT s worden vergrendeld.

Merk echter op dat InnoDB kan meer rijen vergrendelen dan voldoen aan de WHERE voorwaarde. Dit komt omdat het alle rijen vergrendelt gescand , niet alleen die overeenkomstig .

Stel, je hebt een index op col1 en deze vraag:

SELECT  *
FROM    mytable
WHERE   col1 = 1
        AND col2 = 2
FOR UPDATE

gebruikt deze index.

Dit vergrendelt alle records met col1 = 1 , zelfs die met col2 <> 2



  1. Een tekenreeks en een getal samenvoegen in MySQL

  2. SUBSTRING Commando in SQL:A Primer

  3. Hoe Unix-tijdperk naar een tijdstempel te converteren

  4. Uw PostgreSQL-back-ups valideren op Docker