web-dev-qa-db-fra.com

Qu'advient-il d'une transaction si la connexion réseau échoue?

Qu'advient-il d'une transaction lorsque la connexion client est perdue.
[.____] exemple Le client est un code d'application Web qui commence une transaction à une instance de serveur distant. Le client envoie le code SQL au serveur et attend la transaction à compléter.
[.____] Que se passe-t-il si la connexion réseau échoue? Cela dépend-il du point que nous sommes dans une transaction? Est-ce non pertinent? Est-il avorté?

4
Jim

http://dev.mysql.com/doc/refman/5.6/fr/innodb-implicite-commit.html dit:

Si une session qui a une touche autocommande désactivée se termine sans commettre explicitement la transaction finale, MySQL retient cette transaction.

Cela signifie que si votre session se déconnecte pour une raison quelconque, soit par choix, soit parce qu'une erreur se produit comme la connexion réseau échoue, etc., une transaction en cours est renvoyée.

Si vous y réfléchissez, c'est la seule chose appropriée pour le RDBM. Cela ne sait pas si vous aviez terminé le travail de votre transaction uniquement partiellement. Par exemple, vous aurez peut-être débité d'un compte bancaire et vous avez l'intention de créditer un autre compte bancaire pour refléter un transfert de fonds. Si le débit est survenu, mais le crédit n'a pas, et la connexion est perdue, MySQL n'a aucun moyen de compléter la transaction ni même de savoir ce que vous vouliez faire ensuite. Donc, il doit rouler tous les travaux jusqu'à présent.

9
Bill Karwin

Pour désactiver le mode Autocommet implicitement pour une seule série de déclarations, utilisez l'instruction Démarrer des transactions.

Source: https://dev.mysql.com/doc/refman/5.6/fr/commit.html

0
mvorisek