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.