Lad mig gennemgå dine sager og forklare, hvordan disse låse fungerer:
1 sag
T1 ønsker at opdatere nogle rækker i din testtabel. Denne transaktion sætter IX-lås på alle borde og X-lås på de første 5 rækker.
T2 ønsker at opdatere nogle rækker i din testtabel. Denne transaktion sætter IX (fordi IX kompatibel med IX) lås på alle tabeller og forsøger at de første 5 rækker, men det kan ikke gøre det, fordi X ikke er kompatibel med X
Så vi har det godt.
2.1 sag
T1 ønsker at opdatere nogle rækker i din testtabel. Denne transaktion satte IX-lås på alle borde og X-lås på de første 5 rækker.
T2 ønsker at vælge nogle rækker fra din testtabel. Og den placerer ingen låse (fordi InnoDB leverer ikke-låsende læsninger)
2.1 sag
T1 ønsker at opdatere nogle rækker i din testtabel. Denne transaktion satte IX-lås på alle borde og X-lås på de første 5 rækker.
T2 ønsker at opdatere (vælg for opdatering) nogle rækker fra din testtabel. Placer IS på hele bordet og forsøger at få S-lås på rækken og mislykkes, fordi X og S er uforenelige.
Vær også altid opmærksom på isolationsniveauet:forskellige niveauer forårsager, at forskellige mekanismer frigør/erhverver låse
Håber det hjælper