2013-07-25 7 views
8

Ich habe eine MySQL-Abfrage auf einer InnoDB-Tabelle wie folgt aus:Transaktion für einzelne Update-Abfrage erforderlich?

UPDATE items SET qty = qty + 5 WHERE item_id = 1234 LIMIT 1; 

Habe ich eine Transaktion für diese verwenden? Kann etwas Unerwünschtes passieren, wenn Sie keine Transaktion verwenden?

+0

Nein, Sie brauchen dafür keine Transaktion. http://stackoverflow.com/questions/1171749/what-does-a-transaction-around-a-single-statement-do?answertab=votes#tab-top –

Antwort

8

Nichts ernstes kann passieren. Standardmäßig umschließt MySQL alle einzelnen Befehle zum Aktualisieren/Einfügen/Löschen in einer Transaktion. Wenn beim Update etwas schief geht, sollte die Transaktion korrekt zurückgesetzt werden.

Sie brauchen wirklich nur Transaktionen, wenn Sie mehrere Änderungen kombinieren und alle gleichzeitig oder gar nicht wirksam werden sollen.

Sie können mehr darüber in der documentation lesen.

+0

Das war, was ich dachte, wollte nur sicher sein Danke. –

+2

@Gordon, Wie hoch ist die Isolationsstufe für diese Standardtransaktion? Wenn wir "t set c = c + 1" aktualisieren müssen, haben wir ein verlorenes Update, wenn 10k Benutzer diese Anweisung gleichzeitig ausführen? – Pacerier

+0

@Gordon In der Dokumentation, die Sie verlinkt haben, wird nicht erwähnt, dass MySQL alle einzelnen Befehle in einer Transaktion umschreibt. Wo haben Sie diese Informationen her? – Scadge

Verwandte Themen