web-dev-qa-db-fra.com

Utiliser des transactions pour certains relevés?

Je n'utilise pas les procédures stockées très souvent et je me demandais si cela avait du sens d'envelopper mes requêtes sélectionnées dans une transaction.

Ma procédure comporte trois requêtes de sélection simples, dont deux utilisent la valeur renvoyée par la première.

41
chobo

Dans une application hautement concurrente, il pourrait (théoriquement) arriver que les données que vous avez lues lors de la première sélection soient modifiées avant l'exécution des autres sélections.

Si c'est une situation qui pourrait se produire dans votre application, vous devez utiliser une transaction pour encapsuler vos sélections. Assurez-vous de choisir le bon niveau d'isolement cependant, tous les types de transaction ne garantissent pas des lectures cohérentes.

Mise à jour : Vous pouvez également trouver cet article sur les solutions de mise à jour/insertion simultanées (aka upsert) intéressant. Il met plusieurs méthodes courantes de upsert à l'épreuve pour voir quelle méthode réellement garantit les données ne sont pas modifiées entre une sélection et l'instruction suivante. Je dirais que les résultats sont choquants.

44
Marnix van Valen

Les transactions sont généralement utilisées lorsque vous avez des instructions CREATE, UPDATE ou DELETE et que vous souhaitez avoir le comportement atomique , c'est-à-dire Soit tout commettre, soit rien.

Cependant, vous pouvez utiliser une transaction pour les instructions READ select pour:
Assurez-vous que personne d'autre ne peut mettre à jour la table d'intérêt pendant que le groupe de votre requête de sélection s'exécute.

Jetez un oeil à ce msdn post .

4
FIre Panda