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

MySQL:Gleichzeitige Updates (durch Threads) auf einer einfachen Tabelle

Das Sperren ist implizit, ja, aber es wird nicht von executeUpdate() durchgeführt . Die Speicher-Engine in MySQL übernimmt das Sperren und Entsperren.

Jedes Mal, wenn Sie in eine MyISAM-Tabelle schreiben, wartet Ihre Abfrage darauf, dass die Schreibsperre für die Tabelle verfügbar ist, die Schreibsperre wird erworben, der Schreibvorgang ist abgeschlossen und die Schreibsperre wird aufgehoben. In MyISAM gibt es keine echte Schreibparallelität, da jeder Worker tatsächlich in der Schlange auf die Schreibsperre wartet. Sie erhalten keinen Fehler, da die Schreibanforderungen serialisiert sind.

Die Situation mit InnoDB ist ähnlich, aber sehr unterschiedlich, da InnoDB nur einen Teil der Tabelle sperrt, typischerweise auf Zeilenebene, wo InnoDB einen Bereich innerhalb eines Index sperren kann, wodurch die Zeilen in diesem Bereich im Index (und der Lücke, die ihnen vorausgeht). Diese Sperrung ist granularer als die Tabellensperrung und ermöglicht ein verbessertes Parallelitätsverhalten, aber es gibt keine gleichzeitige Operation in derselben Zeile – jeder Worker wartet auf die Sperre oder Sperren, die er benötigt.

In beiden Fällen werden die Sperren implizit genommen.