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ší.