Ik veronderstel dat u InnoDB-tabellen gebruikt en niet MyISAM-tabellen. Zoals beschreven in het InnoDB transactiemodel , allemaal uw zoekopdrachten (inclusief SELECT) vinden plaats binnen een transactie.
Wanneer AutoCommit
is ingeschakeld, wordt voor elke zoekopdracht een transactie gestart en als deze succesvol is, wordt deze impliciet vastgelegd (als het mislukt, kan het gedrag variëren, maar de transactie wordt gegarandeerd beëindigd). Je kunt de impliciete commits zien in de binlog van MySQL. Door AutoCommit
. in te stellen tot false, moet u de transacties zelf beheren.
Het standaard transactie-isolatieniveau is HERHAALBAAR LEZEN , wat betekent dat alle SELECT
query's zullen dezelfde momentopname lezen (degene die is gemaakt toen de transactie begon).
Naast de oplossing gegeven in het andere antwoord (ROLLBACK
voordat u begint te lezen) zijn hier een aantal oplossingen:
U kunt een ander transactie-isolatieniveau kiezen, zoals LEES TOEGEVOEGD
, waardoor uw SELECT
query's lezen elke keer een nieuwe momentopname.
U kunt ook AutoCommit
leave verlaten naar true (de standaardinstelling) en start uw eigen transacties door BEGIN WORK
. op te geven . Hiermee wordt de AutoCommit
tijdelijk uitgeschakeld gedrag totdat u een COMMIT
. geeft of ROLLBACK
statement waarna elke query weer zijn eigen transactie krijgt (of je begint een andere met BEGIN WORK
).
Persoonlijk zou ik voor de laatste methode kiezen, omdat deze eleganter lijkt.