Pozwól, że przejdę przez twoje przypadki i wyjaśnię, jak działają te zamki:
1 sprawa
T1 chce zaktualizować niektóre wiersze w Twojej tabeli testowej. Ta transakcja ustawia blokadę IX na wszystkich stołach i blokadę X na pierwszych 5 rzędach.
T2 chce zaktualizować niektóre wiersze w Twojej tabeli testowej. Ta transakcja umieszcza blokadę IX (ponieważ IX jest zgodny z IX) na całej tabeli i próbuje wykonać pierwsze 5 wierszy, ale nie może tego zrobić, ponieważ X nie jest zgodny z X
Więc u nas wszystko w porządku.
2.1 przypadek
T1 chce zaktualizować niektóre wiersze w Twojej tabeli testowej. Ta transakcja umieściła blokadę IX na wszystkich stołach i blokadę X na pierwszych 5 rzędach.
T2 chce wybrać kilka wierszy z tabeli testowej. I nie nakłada żadnych blokad (ponieważ InnoDB zapewnia odczyty bez blokowania)
2.1 przypadek
T1 chce zaktualizować niektóre wiersze w Twojej tabeli testowej. Ta transakcja umieściła blokadę IX na wszystkich stołach i blokadę X na pierwszych 5 rzędach.
T2 chce zaktualizować (wybrać do aktualizacji) niektóre wiersze z Twojej tabeli testowej. Umieść IS na całym stole i próbuje uzyskać blokadę S w wierszu i kończy się niepowodzeniem, ponieważ X i S są niekompatybilne.
Zawsze pamiętaj również o poziomie izolacji:inny poziom powoduje inny mechanizm zwalniania/nabywania blokad
Mam nadzieję, że to pomoże