Ich nehme an, Sie verwenden InnoDB-Tabellen und keine MyISAM-Tabellen. Wie im Transaktionsmodell von InnoDB beschrieben , alle Ihre Abfragen (einschließlich SELECT) finden innerhalb einer Transaktion statt.
Wenn AutoCommit
eingeschaltet ist, wird für jede Abfrage eine Transaktion gestartet, und wenn sie erfolgreich ist, wird sie implizit festgeschrieben (wenn sie fehlschlägt, kann das Verhalten variieren, aber die Transaktion wird garantiert beendet). Sie können die impliziten Commits im Binlog von MySQL sehen. Durch Setzen von AutoCommit
auf false, müssen Sie die Transaktionen selbst verwalten.
Die Standard-Transaktionsisolationsstufe ist REPEATABLE READ , was bedeutet, dass alle SELECT
Abfragen lesen denselben Snapshot (den, der erstellt wurde, als die Transaktion gestartet wurde).
Zusätzlich zu der in der anderen Antwort angegebenen Lösung (ROLLBACK
bevor Sie anfangen zu lesen) hier sind ein paar Lösungen:
Sie können eine andere Transaktionsisolationsstufe wählen, wie VERPFLICHTET LESEN
, wodurch Ihr SELECT
entsteht Abfragen lesen jedes Mal einen neuen Snapshot.
Sie können AutoCommit
auch verlassen auf true (die Standardeinstellung) und starten Sie Ihre eigenen Transaktionen, indem Sie BEGIN WORK
ausgeben . Dadurch wird AutoCommit
vorübergehend deaktiviert Verhalten, bis Sie ein COMMIT
ausgeben oder ROLLBACK
Anweisung, nach der jede Abfrage wieder eine eigene Transaktion erhält (oder Sie starten eine andere mit BEGIN WORK
).
Ich persönlich würde letztere Methode wählen, da sie eleganter erscheint.