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

Comportement "sélectionner pour la mise à jour" de MySQL

Permettez-moi de passer en revue vos cas et de vous expliquer le fonctionnement de ces verrous :

1 cas

T1 souhaite mettre à jour certaines lignes de votre table de test. Cette transaction place un verrou IX sur toutes les tables et un verrou X sur les 5 premières lignes.

T2 souhaite mettre à jour certaines lignes de votre table de test. Cette transaction verrouille IX (parce que IX compatible avec IX) sur toutes les tables et essaie les 5 premières lignes mais elle ne peut pas le faire car X n'est pas compatible avec X

Donc nous allons bien.

Cas 2.1

T1 souhaite mettre à jour certaines lignes de votre table de test. Cette transaction a mis un verrou IX sur toutes les tables et un verrou X sur les 5 premières lignes.

T2 souhaite sélectionner certaines lignes de votre table de test. Et il ne place aucun verrou (car InnoDB fournit des lectures non verrouillables)

Cas 2.1

T1 souhaite mettre à jour certaines lignes de votre table de test. Cette transaction a mis un verrou IX sur toutes les tables et un verrou X sur les 5 premières lignes.

T2 souhaite mettre à jour (sélectionner pour mise à jour) certaines lignes de votre table de test. Placez IS sur toute la table et essayez d'obtenir un verrou S sur la ligne et échouez car X et S ne sont pas compatibles.

Soyez également toujours conscient du niveau d'isolement :un niveau différent entraîne un mécanisme différent pour libérer/acquérir des verrous

J'espère que ça aide