Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

myisam coloca table-lock na tabela mesmo ao lidar com a consulta 'select'?


MyISAM tem diferentes tipos de bloqueios. Um SELECT operação coloca um LER BLOQUEIO na mesa. Pode haver vários bloqueios de leitura ativos a qualquer momento, desde que não haja BLOQUEIOS DE ESCRITA ativos . Operações que modificam a tabela, por exemplo. INSERT , UPDATE , DELETE ou ALTER TABLE coloque um WRITE LOCK na mesa. O bloqueio de gravação só pode ser colocado em uma tabela quando não houver bloqueios de leitura ativos; Se houver bloqueios de leitura ativos, o MyISAM enfileira o bloqueio de gravação para ser ativado assim que todos os bloqueios de leitura ativos expirarem.

Da mesma forma, quando há um bloqueio de gravação ativo, tentar colocar um bloqueio de leitura em uma tabela enfileirará o bloqueio (e a consulta associada) até que os bloqueios de gravação tenham expirado na tabela.

Em última análise, tudo isso significa que:
  • Você pode ter qualquer número de bloqueios de leitura ativos (também chamados de bloqueios compartilhados)
  • Você só pode ter um bloqueio de gravação ativo (também chamado de bloqueio exclusivo)

Para obter mais informações, consulte:http://dev.mysql. com/doc/refman/5.5/en/internal-locking.html