sql >> Base de Datos >  >> RDS >> Mysql

Bloqueo de MySQL en error de clave duplicada

Creo que estás simplificando la terminología/proceso. Después de analizar la consulta y antes de ejecutarla, debe adquirir los bloqueos necesarios. Es en este punto que se determina que:

  • la sesión 1 obtiene el bloqueo exclusivo, porque se está insertando y no hay otros bloqueos
  • las sesiones 2 y 3 se ponen en cola para el bloqueo compartido porque el bloqueo exclusivo ya está en manos de la sesión 1, y las sesiones 2 y 3 tienen un error de clave duplicada

Según lo anterior, las sesiones 2 y 3 se ponen en cola para bloqueos compartidos porque tienen un error de clave duplicada. Sin embargo, cuando la sesión 1 elimina la clave y libera el bloqueo exclusivo, ahora tanto la sesión 2 como la 3 obtienen bloqueos compartidos. En este punto, ambos intentan adquirir un bloqueo exclusivo para completar la inserción. Sin embargo, ninguno puede hacerlo porque el otro ya tiene el candado compartido. Por lo tanto, el bloqueo exclusivo no se otorga a ninguno de los dos y se interbloquean.