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

Warum funktioniert diese Auswahl für das Aktualisierungsbeispiel?

Ich denke, das erwartete Verhalten ist ein wenig daneben. Vor db_slow-Commits werden alle Zeilen in der Tabelle gesperrt. Nach dem Commit gibt es zwei Zeilen. db_fast wird entsperrt, wenn db_slow festschreibt. Daher ist das Verhalten:

  1. db_slow:Zeile 1 auswählen und sperren
  2. db_slow:sehen, dass es nur 1 Zeile ist und warten
  3. db_fast:versuche Zeile 1 auszuwählen, sieh nach, dass sie gesperrt ist, warte
  4. db_slow:Zeile mit '2' einfügen
  5. db_slow:festschreiben
  6. db_fast:entsperrt und liest 2 Zeilen
  7. db_fast:tut nichts
  8. Am Ende foo:1, 2