Je pense que le comportement attendu est un peu décalé. Avant la validation de db_slow, toutes les lignes de la table sont verrouillées. Après la validation, il y a deux lignes. db_fast est débloqué lors de la validation de db_slow. Par conséquent, le comportement est :
- db_slow :sélectionnez la ligne 1 et verrouillez-la
- db_slow :vérifiez qu'il ne s'agit que d'une ligne et attendez
- db_fast :essayez de sélectionner la ligne 1, vérifiez qu'elle est verrouillée, attendez
- db_slow :insérer une ligne avec '2'
- db_slow :validation
- db_fast :débloqué et lit 2 lignes
- db_fast :ne fait rien
- Finissez avec foo :1, 2