ok, j'ai essayé de chercher et je n'ai pas trouvé de réponse à cela - je suis curieux de savoir comment le ROLLBACK gère les conditions de course. Par exemple:condition de course MISE À JOUR modification de la colonne de crédit - que se passe-t-il lors du rollback?
Si j'ai une table (CompanyAccount) qui tient compte du nombre de crédits disponibles pour une entreprise (il n'y a qu'une seule ligne dans une table de base de données par société) et il y a potentiellement plusieurs utilisateurs entreprise qui peut décrémenter les crédits du compte unique de l'entreprise, que se passe-t-il en cas d'erreur lors d'un ROLLBACK?
Exemple:
Hypothèses: J'ai écrit la mise à jour correctement pour calculer le nouvel équilibre « crédit » au lieu de deviner ce que le nouveau solde créditeur est (autrement dit, nous essayons de ne pas dire l'instruction UPDATE ce que la nouvelle solde créditeur/valeur, nous disons prendre tout ce qui est dans la colonne de crédit et soustrayez ma valeur décrément dans l'instruction uPDATE) ...
ici est un exemple de la façon dont la déclaration de mise à jour est écrit:
MISE à jOUR dbo .CompanyAccount SET Credit = Crédit - @DecrementAmount O Company CompanyAccountId = @CompanyAccountId
Si la colonne "Crédit" contient 10 000 crédits. L'utilisateur A entraîne une diminution de 4 000 crédits et l'utilisateur B une diminution de 1 000 crédits. Pour une raison quelconque, une annulation est déclenchée pendant la décrémentation de l'utilisateur A (il y a environ une demi-douzaine de tables supplémentaires avec des lignes qui sont insérées pendant la TRANSACTION). Si l'utilisateur A gagne la condition de concurrence et que le nouveau solde est de 6000 (mais pas encore COMMITé), que se passe-t-il si le décrément de l'utilisateur B se produit avant que l'annulation ne soit appliquée? la colonne d'équilibre passe-t-elle de 6 000 à 5 000, puis ramène ROLLBACK à 10 000?
Je ne suis pas trop clair sur la façon dont le ROLLBACK va gérer cela. Peut-être que je simplifie trop. Quelqu'un peut-il me dire si je comprends mal comment ROLLBACK va fonctionner ou s'il y a d'autres risques dont je dois m'inquiéter pour ce style.
Merci de votre participation.
en fonction de ce lien (http://msdn.microsoft.com/en-us/library/ms378149.aspx) "Si les deux transactions mettent à jour les lignes à l'aide d'une seule instruction UPDATE et ne basent pas la mise à jour sur la récupération précédente valeurs, les mises à jour perdues ne peuvent pas se produire au niveau d'isolation par défaut de read committed. " – Skyguard
merci pour votre commentaire/aide – Skyguard