2010-11-23 6 views
3

Ich versuche, ein Programm zu erstellen, das 2 verschiedene Tabellen mit SQL-Befehlen aktualisiert. Das einzige, worüber ich mir Sorgen mache, ist, dass, wenn das Programm eine der Tabellen aktualisiert und dann die Verbindung oder was auch immer verliert und die andere Tabelle NICHT aktualisiert, ein Problem auftreten könnte. Gibt es eine Möglichkeit könnte ich entwederSQL multi-Befehl Atomarität Frage

A. sie an der exakt gleichen Zeit aktualisieren

oder

B. Revert das erste Update, wenn die zweite ausfällt.

+1

Ich glaube, Sie suchen nach Informationen zu "Transaktionen". Suchen Sie nach Informationen zur Verwendung von Transaktionen in Ihrer spezifischen Datenbank (die Sie nicht in den Tags angegeben haben). – Kendrick

+0

Was ist die Fehler-/Ausnahmebedingungsnachricht? –

+1

Wenn Sie eine Transaktion verwenden, entweder beides oder keine. Das erste Update muss nicht zurückgesetzt werden. –

Antwort

1

Die meisten SQL-Server unterstützen Transaktionen, das heißt, eine Reihe von Aktionen in die Warteschlange einzureihen und dann atomar passieren zu lassen. Um dies zu tun, wickeln Sie Ihre Fragen als solche:

START TRANSACTION; 
*do stuff* 
COMMIT; 

Sie können Ihre Server-Dokumentation finden Sie weitere Informationen konsultieren, was zusätzliche Funktionen unterstützt. Zum Beispiel here is a more detailed discussion von Transaktionen in MySQL.

2

Abhängig von der Datenbank würde ich vorschlagen, eine gespeicherte Prozedur oder Funktion basierend auf den beteiligten Operationen zu verwenden. Sie sind unterstützt von:

  • MySQL
  • Oracle
  • SQL Server
  • PostgreSQL

Diese eine Datenbanktransaktion (Atom in der Natur kapseln - es geschieht entweder, oder es doesn überhaupt, ohne das zusätzliche Gewicht, die Abfragen über die Leitung an die Datenbank zu senden ... Da sie bereits in der Datenbank vorhanden sind, werden die Abfragen parametrisiert (sicher vor SQL-Injection-Angriffen), was bedeutet, dass weniger Daten gesendet werden - nur die Parameterwerte.