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

MySQL-Sperre bei Duplicate Key Error

Ich denke, Sie vereinfachen die Terminologie / den Prozess. Nachdem die Abfrage analysiert wurde und bevor sie ausgeführt wird, muss sie die erforderlichen Sperren erwerben. An diesem Punkt wird Folgendes festgelegt:

  • Session 1 erhält die exklusive Sperre, weil sie eingefügt wird und es keine anderen Sperren gibt
  • Sitzung 2 und 3 werden für die gemeinsame Sperre in die Warteschlange eingereiht, da die exklusive Sperre bereits von Sitzung 1 gehalten wird und Sitzung 2 und 3 in einem doppelten Schlüsselfehler sind

Wie oben beschrieben, werden die Sitzungen 2 und 3 für gemeinsame Sperren in die Warteschlange gestellt, da sie einen doppelten Schlüsselfehler aufweisen. Wenn jedoch Sitzung 1 den Schlüssel löscht und die exklusive Sperre freigibt, erhalten jetzt sowohl Sitzung 2 als auch 3 gemeinsame Sperren. An diesem Punkt versuchen beide, eine exklusive Sperre zu erwerben, um die Einfügung abzuschließen. Keiner kann es jedoch, weil der andere bereits die gemeinsame Sperre hält. Daher wird beiden keine exklusive Sperre gewährt und sie blockieren.