Hay ciertos problemas cuando se trata de transacciones y los diferentes niveles de aislamiento evitan más o menos de ellos. He descrito esto en mi respuesta aquí
.
Un problema como la lectura fantasma, por ejemplo, puede afectar el resultado de una selección como si la estuvieras haciendo, sí. Pero el resultado de SQL_CALC_FOUND_ROWS se almacena tan pronto como finaliza la consulta y se pierde tan pronto como ejecuta otra consulta en la misma sesión. Esa es la parte importante. SQL_CALC_FOUND_ROWS está limitado a la sesión . No hay forma de que el resultado de otra consulta en otra sesión se almacene en su sesión actual. El uso de SQL_CALC_FOUND_ROWS no está sujeto a condiciones de carrera. El resultado de la consulta SELECT, sí, pero no el resultado de FOUND_ROWS(). No confundas esto.