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
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
.