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

Pourquoi cet exemple de sélection pour la mise à jour fonctionne-t-il ?

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 :

  1. db_slow :sélectionnez la ligne 1 et verrouillez-la
  2. db_slow :vérifiez qu'il ne s'agit que d'une ligne et attendez
  3. db_fast :essayez de sélectionner la ligne 1, vérifiez qu'elle est verrouillée, attendez
  4. db_slow :insérer une ligne avec '2'
  5. db_slow :validation
  6. db_fast :débloqué et lit 2 lignes
  7. db_fast :ne fait rien
  8. Finissez avec foo :1, 2