Mysql
 sql >> Base de données >  >> RDS >> Mysql

Verrouillage MySQL dans l'erreur de clé en double

Je pense que vous simplifiez la terminologie / le processus. Une fois la requête analysée et avant son exécution, elle doit acquérir les verrous nécessaires. C'est à ce stade qu'il est déterminé que :

  • la session 1 obtient le verrou exclusif, car elle est en cours d'insertion et qu'il n'y a pas d'autres verrous
  • les sessions 2 et 3 sont mises en file d'attente pour le verrou partagé car le verrou exclusif est déjà détenu par la session 1, et les sessions 2 et 3 sont dans une erreur de clé en double

Comme ci-dessus, les sessions 2 et 3 sont mises en file d'attente pour les verrous partagés car elles sont en erreur de clé en double. Cependant, lorsque la session 1 supprime la clé et libère le verrou exclusif, les sessions 2 et 3 obtiennent désormais des verrous partagés. À ce stade, les deux essaient d'acquérir un verrou exclusif pour terminer l'insertion. Cependant, aucun des deux ne le peut, car l'autre détient déjà le verrou partagé. Ainsi, le verrouillage exclusif n'est accordé ni à l'un ni à l'autre et ils se bloquent.