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

¿Por qué funciona este ejemplo de selección para actualizar?

Creo que el comportamiento esperado está un poco fuera de lugar. Antes de que se confirme db_slow, todas las filas de la tabla están bloqueadas. Después de que se confirma, hay dos filas. db_fast se desbloquea cuando se confirma db_slow. Por lo tanto, el comportamiento es:

  1. db_slow:seleccione la fila 1 y bloquéela
  2. db_slow:vea que es solo 1 fila y espere
  3. db_fast:intente seleccionar la fila 1, vea que está bloqueada, espere
  4. db_slow:insertar fila con '2'
  5. db_slow:confirmar
  6. db_fast:desbloqueado y lee 2 filas
  7. db_fast:no hace nada
  8. Termina con foo:1, 2