Suponho que você esteja usando tabelas InnoDB e não MyISAM. Conforme descrito no modelo de transação do InnoDB , todos suas consultas (incluindo SELECT) estão ocorrendo dentro de uma transação.
Quando
AutoCommit
está ativado, uma transação é iniciada para cada consulta e, se for bem-sucedida, é implicitamente confirmada (se falhar, o comportamento pode variar, mas a transação é garantida para terminar). Você pode ver os commits implícitos no log binário do MySQL. Configurando AutoCommit
para false, você deverá gerenciar as transações por conta própria. O nível de isolamento de transação padrão é REPEATABLE READ , o que significa que todos os
SELECT
as consultas lerão o mesmo instantâneo (aquele estabelecido quando a transação foi iniciada). Além da solução dada na outra resposta (
ROLLBACK
antes de começar a ler) aqui estão algumas soluções:Você pode escolher outro nível de isolamento de transação, como LEIA COMPROMETIDO , o que torna seu
SELECT
consultas leem um instantâneo novo toda vez. Você também pode deixar
AutoCommit
para true (a configuração padrão) e inicie suas próprias transações emitindo BEGIN WORK
. Isso desativará temporariamente o AutoCommit
comportamento até que você emita um COMMIT
ou ROLLBACK
após a qual cada consulta obtém sua própria transação novamente (ou você inicia outra com BEGIN WORK
). Eu, pessoalmente, escolheria o último método, pois parece mais elegante.