Lassen Sie mich Ihre Fälle durchgehen und erklären, wie diese Sperren funktionieren:
1 Fall
T1 möchte einige Zeilen in Ihrer Testtabelle aktualisieren. Diese Transaktion setzt eine IX-Sperre auf alle Tabellen und eine X-Sperre auf die ersten 5 Zeilen.
T2 möchte einige Zeilen in Ihrer Testtabelle aktualisieren. Diese Transaktion setzt IX (weil IX kompatibel mit IX) Sperre auf alle Tabellen und versucht die ersten 5 Zeilen, aber sie kann es nicht tun, weil X nicht mit X kompatibel ist
Uns geht es also gut.
2.1-Fall
T1 möchte einige Zeilen in Ihrer Testtabelle aktualisieren. Diese Transaktion setzte eine IX-Sperre auf alle Tabellen und eine X-Sperre auf die ersten 5 Zeilen.
T2 möchte einige Zeilen aus Ihrer Testtabelle auswählen. Und es setzt keine Sperren (da InnoDB nicht sperrende Lesevorgänge bereitstellt)
2.1-Fall
T1 möchte einige Zeilen in Ihrer Testtabelle aktualisieren. Diese Transaktion setzte eine IX-Sperre auf alle Tabellen und eine X-Sperre auf die ersten 5 Zeilen.
T2 möchte einige Zeilen aus Ihrer Testtabelle aktualisieren (zur Aktualisierung auswählen). Platzieren Sie IS auf der gesamten Tabelle und versuchen Sie, eine S-Sperre für die Zeile zu erhalten, was fehlschlägt, da X und S nicht kompatibel sind.
Achten Sie auch immer auf die Isolationsstufe:Unterschiedliche Stufen bewirken, dass unterschiedliche Mechanismen Sperren freigeben/erwerben
Hoffe es hilft