Maison >base de données >tutoriel mysql >Pourquoi mes sessions MySQL nouvellement créées ne sont-elles pas immédiatement visibles après une transaction ?

Pourquoi mes sessions MySQL nouvellement créées ne sont-elles pas immédiatement visibles après une transaction ?

DDD
DDDoriginal
2024-11-23 22:49:11982parcourir

Why Are My Newly Created MySQL Sessions Not Immediately Visible After a Transaction?

Résultats mis en cache après l'insertion et la suppression de MySQL

Dans une application Web Python/WSGI, les sessions sont stockées dans une table InnoDB dans un MySQL local base de données. Après l'authentification, les anciennes sessions sont supprimées, une nouvelle session est créée et la transaction est validée pour créer un nouvel ID de session pour le cookie. Cependant, il arrive parfois que la session nouvellement créée ne soit pas trouvée dans la base de données après une redirection.

Comprendre le problème

MySQL utilise le niveau d'isolement par défaut « REPEATABLE READ », ce qui signifie les transactions ne verront aucune modification apportée après le début de la transaction. Même si ces modifications ont été validées, elles restent invisibles.

Solution

Pour résoudre ce problème, il existe deux options :

  1. Terminer la transaction :

    • Émettre un COMMIT ou un ROLLBACK dans les sessions où les résultats mis en cache apparaissent. Cela mettra fin à la transaction et permettra aux modifications validées de devenir visibles.
  2. Modifier le niveau d'isolement :

    • Modifier le niveau d'isolement pour les sessions sur "READ COMMITTED". Cela garantira que les modifications apportées par d'autres transactions sont visibles après leur validation.

Considération supplémentaire

Consultez le manuel MySQL pour les options permettant de modifier le niveau d'isolement par défaut. Cela permettra à toutes les sessions d'utiliser automatiquement le niveau d'isolement préféré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn