sql >> Database teknologi >  >> RDS >> Mysql

MySQL InnoDB dødlås på SELECT med eksklusiv lås (TIL OPDATERING)

VÆLG TIL OPDATERING opnår en eksklusiv hensigtslås på bordet, før den opnår den eksklusive lås på posten.

Derfor, i dette scenarie:

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`

en deadlock opstår, da begge transaktioner indeholder en IX lås på bordet og venter på et X lås på optegnelserne.

Faktisk er netop dette scenarie beskrevet i MySQL manual om låsning .

For at omgå dette skal du slippe af med alle indekser undtagen det, du søger på, dvs. låsnavn .

Bare slip den primære nøgle på id .



  1. Sum kolonner med null-værdier i oracle

  2. Datageneratorer til SQL server?

  3. Flere mysql INSERT-sætninger i én forespørgsel php

  4. rigtige syntaks at bruge i nærheden af ​​'?'