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

MySQL-exklusive Sperre

Ja, Sie sperren alle Zeilen in der Tabelle, wenn Sie eine Bedingung für eine nicht indizierte Spalte wie user_id haben .

Die Sperren gelten für alle "untersuchten" Zeilen. Ihre Bedingung WHERE user_id = <user_id> müssen alle untersuchen die Zeilen in der Tabelle und testen Sie sie nacheinander, um zu sehen, ob sie mit dem Wert von <user_id> übereinstimmen .

Beide Abfragen untersuchen den gesamten Zeilensatz, obwohl sie nach unterschiedlichen spezifischen Werten von <user_id> suchen , also stehen sie in Konflikt.

Wenn Sie einen Index für die user_id hatten Spalte, dann würde MySQL diesen Index verwenden, um zuerst die übereinstimmenden Zeilen zu finden, dann würden nur übereinstimmende Zeilen zu untersuchten Zeilen werden und daher gesperrt werden.

Dies hat nichts mit der Transaktionsisolationsstufe zu tun. Diese Arten von Sperren treten in allen Transaktionsisolationsstufen auf.