sql >> Database >  >> RDS >> Mysql

MySQL InnoDB dead lock op SELECT met exclusieve lock (VOOR UPDATE)

SELECT FOR UPDATE verkrijgt een intentie-exclusief slot op de tafel voorafgaand aan het verkrijgen van het exclusieve slot op het record.

Daarom, in dit scenario:

X1: SELECT FOR UPDATE -- holds IX, holds X on 'lock_name'
X2: SELECT FOR UPDATE -- holds IX, waits for X on 'lock_name'
X1: INSERT -- holds IX, waits for X for the gap on `id`

er treedt een impasse op, aangezien beide transacties een IX . bevatten slot op de tafel en wachten op een X lock op de records.

Eigenlijk wordt dit scenario beschreven in de MySQL handleiding over vergrendeling .

Om dit te omzeilen, moet u alle indexen verwijderen, behalve degene waarop u zoekt, namelijk lock_name .

Laat de primaire sleutel gewoon vallen op id .



  1. Is er een verschil tussen DECIMAAL en NUMERIEK in SQL Server?

  2. SQL SELECTEER alles na een bepaald teken

  3. Verbinding maken met MySQL-gegevensbron in PHPStorm

  4. Hoe vind ik een opgeslagen procedure die <tekst> bevat?