Předpokládám, že používáte tabulky InnoDB a ne tabulky MyISAM. Jak je popsáno v InnoDB transakční model , vše vaše dotazy (včetně SELECT) probíhají v rámci transakce.
Když AutoCommit je zapnutá, pro každý dotaz je spuštěna transakce a pokud je úspěšná, je implicitně potvrzena (pokud selže, chování se může lišit, ale je zaručeno, že transakce skončí). Implicitní odevzdání můžete vidět v binlogu MySQL. Nastavením AutoCommit na false, jste povinni řídit transakce sami.
Výchozí úroveň izolace transakcí je OPAKOVATELNÉ PŘEČTĚNÍ , což znamená, že všechny SELECT dotazy budou číst stejný snímek (ten vytvořený při zahájení transakce).
Kromě řešení uvedeného v druhé odpovědi (ROLLBACK než začnete číst) zde je několik řešení:
Můžete si vybrat jinou úroveň izolace transakcí, například PŘEČTĚTE ODPOVĚDĚNO
, což znamená, že SELECT dotazy čtou pokaždé nový snímek.
Můžete také opustit AutoCommit na hodnotu true (výchozí nastavení) a začněte své vlastní transakce zadáním příkazu BEGIN WORK . Tím dočasně deaktivujete AutoCommit chování, dokud nevydáte COMMIT nebo ROLLBACK příkaz, po kterém každý dotaz znovu získá svou vlastní transakci (nebo začnete další s BEGIN WORK ).
Osobně bych zvolil druhý způsob, protože se zdá elegantnější.