sql >> Databáze >  >> RDS >> Mysql

Jak záměrně zamknout řádek MySQL tak, že i SELECT vrátí chybu?

Pokud nastavíte úroveň izolace transakcí na SERIALIZABLE , InnoDB wil implicitně připojit LOCK IN SHARE MODE všem SELECT prohlášení.

Tento režim je v konfliktu se zámky umístěnými pomocí SELECT FOR UPDATE a SELECT s se uzamkne.

Všimněte si však, že InnoDB může zamknout více řádků, než vyhovuje WHERE stav. Je to proto, že zamyká všechny naskenované řádky , nejen ty shodné .

Řekněme, že máte index na col1 a tento dotaz:

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

používá tento index.

Tímto uzamknete vše záznamy s col1 = 1 , dokonce i ty s col2 <> 2



  1. *ALERT* Nelze otevřít žádnou další chybu databází s Microsoft Office build 2201

  2. Monitorování databází a instancí pomocí Activity Monitor | Řešení problémů s výkonem serveru SQL -2

  3. Replikace MySQL:Chybné transakce v replikaci založené na GTID

  4. Jak vypočítat poměr pomocí dotazu SQL?