Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Verhalten „Zum Update auswählen“.

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