2012-09-11 7 views
6

Ich Synchronisation einige SP bei der Arbeit, und ich habe mit der Transaktion feststellen, dass wer auch immer auf einer einzigen Update-Anweisung eine Transaktion der Code geschrieben verwendet wie dieseauf einer einzigen Update-Anweisung

begin transaction 
*single update statment:* update table whatever with whatever 
commit transaction 

Ich verstehe, dass dies, weil falsch ist Die Transaktion wird verwendet, wenn Sie mehrere Aktualisierungen aktualisieren möchten. Ich möchte aus dem theoretischen Punkt verstehen, was sind die Auswirkungen der Verwendung des Codes wie oben? Gibt es einen Unterschied bei der Aktualisierung der Tabelle mit und ohne die Transaktion? Gibt es irgendwelche zusätzlichen Schlösser oder etwas?

+1

Es ist eine Transaktion mit einer einzigen Anweisung. Vielleicht dachte der ursprüngliche Entwickler, dass in der Zukunft zusätzliche Anweisungen/Aktionen erforderlich sein könnten. –

Antwort

5

Vielleicht ist die Transaktion aufgrund vorherigen oder möglichen zukünftigen Code enthalten war, die anderen Daten beinhalten. Vielleicht gewöhnt sich der Entwickler einfach daran, Code in Transaktionen zu verpacken, um "sicher" zu sein?

Aber wenn die Anweisung wörtlich nur ein einziges Update auf eine einzelne Zeile beinhaltet, gibt es keinen Vorteil für diesen Code in diesem Fall. Eine Transaktion "sperrt" nicht notwendigerweise etwas, obwohl die darin ausgeführten Aktionen natürlich auch funktionieren können. Es stellt nur sicher, dass alle darin enthaltenen Aktionen alles oder nichts ausgeführt werden.

Beachten Sie, dass es sich bei einer Transaktion nicht um mehrere Tabellen handelt - es handelt sich um mehrere Aktualisierungen. Sicherstellen, dass mehrere Aktualisierungen mit "alles oder nichts" durchgeführt werden.

Also, wenn Sie die gleiche Tabelle zweimal aktualisieren würden, gäbe es einen Unterschied mit oder ohne die Transaktion. Ihr Beispiel zeigt jedoch nur eine einzige Update-Anweisung, die vermutlich nur einen einzelnen Datensatz aktualisiert.

In der Tat, es ist wahrscheinlich ziemlich häufig, dass Transaktionen mehrere Updates auf die gleiche Tabelle kapseln. Stellen Sie sich Folgendes vor:

INSERT INTO Transactions (AccountNum, Amount) VALUES (1, 200) 
INSERT INTO Transactions (AccountNum, Amount) values (2, -200) 

Das sollte in eine Transaktion verpackt werden, um sicherzustellen, dass das Geld korrekt übertragen wird. Wenn einer versagt, so sehr der andere.

+0

Die Frage ist: Gibt es einen Unterschied zwischen einer einzelnen Update-Anweisung mit und ohne die Transaktion? – user1662812

+0

@ user1662812 Es tut absolut nichts.Alle einzelnen Anweisungen sind bereits in einer Transaktion effektiv verpackt. Ich glaube jedoch nicht, dass dies eine äußere Wrapping-Transaktion erzeugt. –

4

Ich verstehe, dass dies falsch ist, weil die Transaktion verwendet wird, wenn Sie mehrere Tabellen aktualisieren möchten.

Nicht unbedingt. Dies beinhaltet eine Tabelle nur - und nur 2 Reihen:

--- transaction begin 

BEGIN TRANSACTION ; 

UPDATE tableX 
SET Balance = Balance + 100 
WHERE id = 42 ; 

UPDATE tableX 
SET Balance = Balance - 100 
WHERE id = 73 ; 

COMMIT TRANSACTION ; 

--- transaction end 
3

Hoffentlich sieht der Code Ihres Kollegen eher so aus, sonst gibt SQL einen Syntaxfehler aus. Laut Ypercubes Kommentar gibt es keinen wirklichen Zweck, eine Anweisung innerhalb einer Transaktion zu platzieren, aber möglicherweise ist dies ein Codierungsstandard oder Ähnliches.

begin transaction -- Increases @@TRANCOUNT to 1 
update table whatever with whatever 
commit transaction -- DECREMENTS @@TRANCOUNT to 0 

Oft, wenn Ad-hoc-Anweisungen direkt in den SQL-Ausgabe, ist es eine gute Idee ist, Ihre Anweisungen in einer Transaktion zu wickeln, nur für den Fall etwas schief geht und Sie müssen rückgängig zu machen, das heißt

begin transaction -- Just in case my query goofs up 
update table whatever with whatever 
select ... from table ... -- check that the correct updates/deletes/inserts happened 
-- commit transaction -- Only commit if the above check succeeds. 
Verwandte Themen