Frage

Ich war gerade über RDBMS Lesen, und eine Eigenschaft eines RDBMS Unteilbarkeit. So wird, wenn das Geld zurück von einem Konto und übertragen eine andere, entweder die Transaktion wird passieren, vollständig oder nicht überhaupt. Es gibt keinen Teil Transaktionen. Aber wie ist eigentlich gewährleistet?

SQL-Abfragen für das oben beschriebene Szenario könnte so aussehen (I) UPDATE accounts eingestellten Balance = Balance - Menge WHERE ac_num = 101 (Ii) UPDATE accounts eingestellten Balance = + Balance Menge WHERE ac_num = 102

Welche keineswegs gewährleistet, Unteilbarkeit .. Wie funktioniert es eigentlich passieren?

War es hilfreich?

Lösung

Wenn Sie das tun

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

Das Datenbanksystem wird die Noten schreiben, was für Änderungen am Konto 101 erfolgt ist, und dann, wenn die Arbeit wegen 102 fehlschlagen würde, verwendet das RDBMS diese Notizen, die Arbeit auf 101 rückgängig zu machen.

Darüber hinaus, wenn es Arbeit für 101 nimmt eine Sperre für die Datenbank gestartet wird, so dass niemand sonst kommen kann und die aktualisierte, aber nicht festgeschriebenen Daten in Konto 101 gelesen. (Schloß hier ist im Grunde nur eine Note irgendwo „Ich arbeite hier, nicht berühren.“)

Andere Tipps

Um atomar, müssen Transaktionen:

  • andere Transaktionen verhindern stören den Reihen sie schreiben oder zu lesen
  • Stellen Sie sicher, dass entweder alle oder keine der Änderungen, dass die Transaktion macht, in der Datenbank sein wird, wenn die Transaktion festgeschrieben.

Zuerst ist man erreicht von Sperr Zeilen, die die Transaktion liest oder schreibt während er die Ausführung ist.

Zweite ist so geschehen, dass die Transaktionen ihre Aktionen in einen Transaktionsprotokoll href="http://en.wikipedia.org/wiki/Transaction_log" schreiben. Dies macht die Datenbank in der Lage, selbst zu erholen, wenn der Server Leistung während einer Transaktion verliert. In diesem Fall liest der Wiederherstellungsprozess das Protokoll, stellen Sie sicher, dass die aktiven (Uncommited) Transaktionen abgebrochen erhalten und von ihnen vorgenommenen Änderungen werden gelöscht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top