Sperrt "SELECT ... FOR UPDATE"
verknüpfte Zeilen in MySQL?
Wenn ja, ist es möglich, dieses Verhalten zu deaktivieren?
In der Dokumentation gibt es dazu nichts. Ich habe gesehen, dass Oracle "SELECT ... FOR UPDATE OF table_name"
unterstützt, wobei Tabellenname die Haupttabelle oder eine der verbundenen Tabellen ist, für die die betroffenen Zeilen gesperrt sind, aber ich habe das nie im Zusammenhang mit MySQL erwähnt.
Siehe diese MySQL-Doc-Seite . Es sagt:
Ein schreibgeschützter Lese-, UPDATE- oder DELETE-Datensatz wird normalerweise für jeden Indexeintrag gesperrt, der bei der Verarbeitung der SQL-Anweisung gescannt wird. Es spielt keine Rolle, ob es WHERE-Bedingungen in der Anweisung gibt, die die Zeile ausschließen würden.
und:
Bei SELECT ... FOR UPDATE oder SELECT ... LOCK IN SHARE MODE werden Locks für gescannte Zeilen erfasst, und es wird erwartet, dass sie für Zeilen freigegeben werden, die nicht in die Ergebnismenge aufgenommen werden können (z. B. wenn sie nicht die in der WHERE-Klausel angegebenen Kriterien erfüllen). In einigen Fällen werden Zeilen jedoch möglicherweise nicht sofort entsperrt, da die Beziehung zwischen einer Ergebniszeile und ihrer ursprünglichen Quelle während der Abfrageausführung verloren geht.
"gescannte Zeilen" bezieht sich auf Zeilen aus einer der Tabellen, die in der Verknüpfung verwendet werden.
SELECT ... FOR UPDATE sperrt die Zeilen und alle zugehörigen Indexeinträge, genauso wie wenn Sie eine UPDATE-Anweisung für diese Zeilen ausgegeben hätten.
und dann
Wenn Autocommit aktiviert ist, sind die Zeilen, die der Spezifikation entsprechen, nicht gesperrt.
Gibt das mySQL-Dokument keine Antworten?
Tags und Links mysql innodb join transactions locks