Você pode encontrar uma discussão sobre diferentes métodos de bloqueios no apêndice. See Secção E.4, “Métodos de Lock”.
        Todos os bloqueios no MySQL são livres de deadlock, exceto para
        tipos de tabela InnoDB e
        BDB. Isto é gerenciado sempre requisitando
        todos os bloqueios necessários de uma vez no começo de uma
        consulta e sempre bloqueando as tabelas na mesma ordem.
      
        Tipos de tabela InnoDB automaticamente
        adquire seus locks de registro e os tipos de tabela
        BDB seus locks de páginas, durante o
        processamento das instruções SQL, e não no início da
        transação.
      
        O método de bloqueio que o MySQL utiliza para
        ESCRITA funciona da seguinte forma:
      
Se não existirem travas na tabela, coloque uma bloqueio de escrita na mesma.
Caso contrário, coloca a requisição de trava na fila de bloqueios para escrita.
        O método de bloqueio que o MySQL utilizado para
        LEITURA funciona da seguinte maneira:
      
Se não existirem tarvas na tabela, coloca um bloqueio de leitura na mesma.
Caso contrário, coloca a requisição de trava na fila de bloqueios para leitura.
Quando um bloqueio é liberado, a trava fica disponível para as threads na fila de bloqueios de escrita, e então para as threads na fila de bloqueios de leitura.
        Isto significa que se você possui várias atualizações em uma
        tabela, instruções SELECT irão esperar
        até que não existam mais atualizações.
      
        Para contornar este problema no caso onde você precisa fazer
        várias operações de INSERT e
        SELECT em uma tabela, você pode inserir
        registros em uma tabela temporária e atualizar a tabela real
        com os registros da tabela temporária de uma só vez.
      
Isto pode ser feito usando o código a seguir:
mysql>LOCK TABLES real_table WRITE, insert_table WRITE;mysql>INSERT INTO real_table SELECT * FROM insert_table;mysql>TRUNCATE TABLE insert_table;mysql>UNLOCK TABLES;
        Você pode utilizar as opções LOW_PRIORITY
        com INSERT, UPDATE ou
        DELETE ou HIGH_PRIORITY
        com SELECT se você desejar priorizar a
        recuperação em alguns casos específicos. Também podei-se
        iniciar o mysqld com
        --low-priority-updates para obter o mesmo
        comportamento.
      
        Utilizar SQL_BUFFER_RESULT pode também
        tornar a criação de locks de tabelas mais curtos.See
        Secção 6.4.1, “Sintaxe SELECT”.
      
        Você também pode alterar o código de bloqueioss no
        mysys/thr_lock.c para usar uma fila
        simples. Neste caso, bloqueios de escrita e leitura devem ter a
        mesma prioridade, o que pode ajudar em algumas aplicações.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

