Istnieją pewne problemy, jeśli chodzi o transakcje, a różne poziomy izolacji zapobiegają im mniej lub bardziej. Opisałem to w mojej odpowiedzi tutaj
.
Problem, taki jak na przykład fantomowy odczyt, może wpłynąć na wynik zaznaczenia, tak jak to robisz, tak. Ale wynik SQL_CALC_FOUND_ROWS jest przechowywany zaraz po zakończeniu zapytania i jest tracony, gdy tylko wykonasz inne zapytanie w tej samej sesji. To jest ważna część. SQL_CALC_FOUND_ROWS jest powiązany z sesją . Nie ma możliwości, aby wynik innego zapytania w innej sesji został zapisany w bieżącej sesji. Użycie SQL_CALC_FOUND_ROWS nie podlega warunkom wyścigu. Wynik zapytania SELECT, tak, ale nie wynik FOUND_ROWS(). Nie myl tego.