Dovolte mi projít vaše případy a vysvětlit, jak tyto zámky fungují:
1 případ
T1 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce umístí zámek IX na všechny tabulky a zámek X na prvních 5 řádků.
T2 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce vloží zámek IX (protože IX je kompatibilní s IX) na všechny tabulky a pokusí se o prvních 5 řádků, ale nemůže to udělat, protože X není kompatibilní s X
Takže jsme v pořádku.
Případ 2.1
T1 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce umístila zámek IX na všechny tabulky a zámek X na prvních 5 řádků.
T2 chce vybrat některé řádky z vaší testovací tabulky. A neumisťuje žádné zámky (protože InnoDB poskytuje nezamykatelné čtení)
Případ 2.1
T1 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce umístila zámek IX na všechny tabulky a zámek X na prvních 5 řádků.
T2 chce aktualizovat (vybrat pro aktualizaci) některé řádky z vaší testovací tabulky. Umístěte IS na celý stůl a pokuste se získat zámek S na řádku a selže, protože X a S nejsou kompatibilní.
Vždy si také uvědomte úroveň izolace:různá úroveň způsobí, že jiný mechanismus uvolní/získá zámky
Doufám, že to pomůže