2017-12-29 9 views
1

Wenn ich 2 Kunden haben die gleiche Zugriff auf das Attribut wie folgt aus:Attribut Level-Wettbewerb - SQL

c1 UPDATE ACCOUNT set balance = balance + 3000 
     where NUM_ACCOUNT = 12390 

c2 UPDATE ACCOUNT set balance = balance - 1500 
     where NUM_ACCOUNT = 12390 

Unter der Annahme, dass das Gleichgewicht war zunächst € 10.000, was der Endwert sein würde?

  • 10000 + 3000 - 1500 = 11500
  • 10000 + 3000 = 13000
  • 10000 - 1500 = 8500
+3

Haben Sie schon einmal von [Datenbanktransaktionen?] Gehört (https://docs.oracle.com/cd/B19306_01/server.102/b14220/transact.htm) – cdaiga

+1

Haben Sie das versucht? – TcKs

+1

Wenn keine Transaktion festgeschrieben oder zurückgesetzt wird, sind keine Aktualisierungen für denselben Datensatz aus einer anderen Sitzung zulässig. Datensatz ist gesperrt. –

Antwort

1

Nach der beiden transactions Commits wird es € 11.500,00 sein (es sei denn etwas sehr böses passiert).

Da Sie kein bestimmtes DBMS markiert haben, verlinke ich auf Oracle und MS-SQL Dokumentation und eine Referenz in Wikipedia. Dude hast du eine Menge darüber zu lesen, wenn Sie tief in wie modern relational database systems behandelt geht dies zu gehen.

Atomicit

Transactions

transactions - MSDN

Die gute Nachricht ist das DBMS (jede anständige) werden Ihnen die Dinge transparent und Sie brauchen nicht damit zu stören und müssen vermeiden, Messing mit jeder Transaktionsoption (lesen Sie nicht committed, Schnappschuss, etc.), es sei denn, Sie wissen sehr gut, was Sie hier tun.

Grundlegend wird das System sowohl Transaktionen als auch Commit nacheinander empfangen, um deadlocks und andere concurrency Probleme zu vermeiden und locks zu respektieren.

1

Relationale Datenbanken implementieren etwas namens ACID properties. Im Grunde stellt dies sicher, dass jeder Benutzer eine konsistente Ansicht der Daten sieht, als ob die Benutzertransaktionen unabhängig voneinander ausgeführt würden. Diese Konsistenz (na ja, "Konsistenz" ist technisch die zweite der vier Eigenschaften) ist ein Hauptgrund, warum relationale Datenbanken für Anwendungen verwendet werden, die Daten ändern.

Wenn also Ihre Einstellungen für die ACID-Konformität (was sie sein sollten, aber sie könnten außer Kraft gesetzt werden), dann wäre das Ergebnis +1500.

Verwandte Themen