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

myisam place le verrou de table sur la table même lorsqu'il s'agit d'une requête 'select'?

MyISAM a différents types de serrures. Un SELECT l'opération place un READ LOCK sur la table. Il peut y avoir plusieurs verrous de lecture actifs à tout moment, tant qu'il n'y a pas de VERROUS EN ÉCRITURE actifs . Les opérations qui modifient la table, par ex. INSERT , UPDATE , DELETE ou ALTER TABLE placer un VERROUILLAGE EN ÉCRITURE sur la table. Un verrou en écriture ne peut être placé sur une table que lorsqu'il n'y a pas de verrous en lecture actifs ; S'il y a des verrous en lecture actifs, MyISAM met en file d'attente le verrou en écriture à activer dès que tous les verrous en lecture actifs ont expiré.

De même, lorsqu'il y a un verrou en écriture actif, tenter de placer un verrou en lecture sur une table mettra le verrou (et la requête associée) en file d'attente jusqu'à ce que les verrous en écriture aient expiré sur la table.

En fin de compte, tout cela signifie que :

  • Vous pouvez avoir n'importe quel nombre de verrous actifs en lecture (également appelés verrous partagés)
  • Vous ne pouvez avoir qu'un seul verrou en écriture actif (également appelé verrou exclusif)

Pour plus d'informations, consultez :http://dev.mysql. com/doc/refman/5.5/en/internal-locking.html