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:
- db_slow:seleccione la fila 1 y bloquéela
- db_slow:vea que es solo 1 fila y espere
- db_fast:intente seleccionar la fila 1, vea que está bloqueada, espere
- db_slow:insertar fila con '2'
- db_slow:confirmar
- db_fast:desbloqueado y lee 2 filas
- db_fast:no hace nada
- Termina con foo:1, 2