Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment empêcher select found_rows de se casser dans des conditions de concurrence ?

Il existe certains problèmes en matière de transactions et différents niveaux d'isolement les empêchent plus ou moins. J'ai décrit cela dans ma réponse ici .
Un problème comme la lecture fantôme par exemple, peut affecter le résultat d'une sélection comme vous le faites, oui. Mais le résultat de SQL_CALC_FOUND_ROWS est stocké dès que la requête se termine et est perdu dès que vous exécutez une autre requête dans la même session. C'est la partie importante. SQL_CALC_FOUND_ROWS est lié à la session . Il est impossible que le résultat d'une autre requête dans une autre session soit stocké dans votre session actuelle. L'utilisation de SQL_CALC_FOUND_ROWS n'est pas soumise à des conditions de concurrence. Le résultat de la requête SELECT, oui, mais pas le résultat de FOUND_ROWS(). Ne confondez pas cela.