2009-11-25 5 views
5

Dans le manuel Spring Framework, ils déclarent que pour une PROPAGATION_REQUIRES_NEW, la transaction en cours sera suspendue.Comment fonctionne la suspension des transactions dans MySQL?

Qu'est-ce que "transaction suspendue"? La temporisation du délai d'attente s'arrête-t-elle à la transaction en cours? Quelles sont les implications réelles d'une telle suspension?

Merci,

Asaf

Répondre

4

Cela ne signifie pas quelque chose de spécial, une transaction suspendue est juste une transaction qui est temporairement non utilisé pour les insertions, les mises à jour, validation ou l'annulation, en raison d'une nouvelle transaction doit être créée en raison des propriétés de propagation spécifiées, et une seule transaction peut être active en même temps.

Fondamentalement, il existe deux modèles de transaction: le modèle imbriqué et plat. Dans le modèle imbriqué, si vous lancez une transaction et que vous en avez besoin d'une autre, la première reste active, c'est-à-dire que la seconde sera imbriquée dans son parent, et ainsi de suite. D'un autre côté, dans le modèle plat, la première transaction sera suspendue, c'est-à-dire que nous ne l'utiliserons pas avant la fin de la nouvelle transaction.

AFAIK le modèle plat est utilisé presque exclusivement (y compris le printemps et la spécification EJB aussi), car il est beaucoup plus facile à mettre en œuvre: il n'y a qu'une seule transaction active à un moment donné, il est donc facile de décider quoi faire en cas de rollback, disons, à cause d'une exception. Plus important encore, la base de données sous-jacente doit prendre en charge si vous avez besoin du modèle imbriqué, de sorte que le modèle plat est simplement le dénominateur commun dans ce cas.

Questions connexes