Question

Je viens de lire sur les SGBDR, et une propriété d'un SGBDR est atomicité. Donc, si l'argent est retiré à partir d'un compte et transféré à une autre, que ce soit la transaction va se passer complètement ou non du tout. Il n'y a pas partiel transactions. Mais comment est en réalité assuré?

requêtes SQL Server pour le scénario ci-dessus pourrait ressembler (I) Mise à jour accounts balance set = équilibre - quantité OÙ ac_num = 101 (Ii) l'équilibre de consigne MISE À JOUR accounts = solde + quantité WHERE ac_num = 102

Ce qui assure nullement atomicité .. Alors, comment se fait-il réellement?

Était-ce utile?

La solution

Si vous faites

BEGIN TRANSACTION
UPDATE accounts set balance = balance - amount WHERE ac_num = 101
UPDATE accounts set balance = balance + amount WHERE ac_num = 102
COMMIT TRANSACTION

Le système de base de données va écrire des notes à ce qui a fait des changements sur compte 101. Et si les travaux sur la 102 échouerait, le SGBDR utilise ces notes pour annuler le travail sur 101.

En outre, quand il a commencé à travailler sur compte 101 est prend un verrou sur la base de données, de sorte que personne ne peut venir d'autre et lire la mise à jour, mais pas des données validées en compte 101. (Un verrou ici est fondamentalement juste une note quelque part: « Je travaille ici, ne touchez pas. »)

Autres conseils

Pour être atomique, les transactions doivent:

  • Empêcher d'autres transactions d'interférer avec les lignes qu'ils sont l'écriture ou la lecture
  • Assurez-vous que ce soit tout ou rien des changements que la transaction fait, sera dans la base de données lorsque la transaction est validée.

La première est réalisée par verrouillage lignes que la transaction ou écrit au cours se lit comme suit son exécution.

La deuxième est fait pour que les transactions écrivent leurs actions dans un journal des transactions de . Cela rend la base de données en mesure de récupérer même lorsque le serveur perd le pouvoir lors d'une transaction. Dans ce cas, le processus de récupération va lire le journal, assurez-vous que les transactions actives (UNCOMMITED) s'avortés et les modifications apportées par les sont annulées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top