Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann verhindert werden, dass ausgewählte found_rows unter Rennbedingungen brechen?

Es gibt bestimmte Probleme, wenn es um Transaktionen geht, und verschiedene Isolationsstufen verhindern mehr oder weniger davon. Ich habe dies in meiner Antwort hier beschrieben .
Ein Problem wie zum Beispiel das Phantomlesen kann das Ergebnis einer Auswahl beeinflussen, so wie Sie es tun, ja. Das Ergebnis von SQL_CALC_FOUND_ROWS wird jedoch gespeichert, sobald die Abfrage beendet ist, und geht verloren, sobald Sie eine andere Abfrage in derselben Sitzung ausführen. Das ist der wichtige Teil. SQL_CALC_FOUND_ROWS ist sitzungsgebunden . Es besteht keine Möglichkeit, dass das Ergebnis einer anderen Abfrage in einer anderen Sitzung in Ihrer aktuellen Sitzung gespeichert wird. Die Verwendung von SQL_CALC_FOUND_ROWS unterliegt keinen Racebedingungen. Das Ergebnis der SELECT-Abfrage, ja, aber nicht das Ergebnis von FOUND_ROWS(). Verwechseln Sie das nicht.