sql >> Databasteknik >  >> RDS >> Mysql

Hur låser man medvetet en MySQL-rad så att även SELECT kommer att returnera ett fel?

Om du ställer in transaktionsisoleringsnivån till SERIALIZABLE , InnoDB wil implicit lägga till LOCK IN SHARE MODE till alla SELECT uttalanden.

Detta läge är i konflikt med låsen som placeras av SELECT FOR UPDATE och SELECT s kommer att låsa.

Observera dock att InnoDB kan låsa fler rader än vad som uppfyller WHERE tillstånd. Detta beror på att det låser alla skannade rader , inte bara de matchade .

Säg att du har ett index på col1 och denna fråga:

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

använder detta index.

Detta låser alla poster med col1 = 1 , även de med col2 <> 2



  1. SQLite - Infoga data

  2. Hur Floor() fungerar i PostgreSQL

  3. Hur man optimerar MySQL-prestanda med MySQLTuner

  4. SQL INSERT INTO från flera tabeller