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

Verrouillage exclusif MySQL

Oui, vous verrouillez toutes les lignes de la table lorsque vous avez une condition sur une colonne non indexée comme user_id .

Les verrous s'appliquent à toutes les lignes "examinées". Votre état WHERE user_id = <user_id> doit examiner tous les lignes du tableau et testez-les une par une pour voir si elles correspondent à la valeur de <user_id> .

Les deux requêtes examinent l'ensemble des lignes, même si elles recherchent différentes valeurs spécifiques de <user_id> , donc ils sont en conflit.

Si vous aviez un index sur le user_id colonne, MySQL utiliserait cet index pour trouver les lignes correspondantes en premier, puis seules les lignes correspondantes deviendraient des lignes examinées et seraient donc verrouillées.

Cela n'a rien à voir avec le niveau d'isolement de la transaction. Ces types de verrous se produisent à tous les niveaux d'isolation des transactions.