2010-12-29 12 views
1

Ich habe mehr als drei MySQL-Abfragen in einem PHP-Skript durch geplante Aufgabe ausgelöst. Wenn bei einer Abfrage ein Fehler auftritt, löst das Skript eine Ausnahme aus und setzt die mysql-Abfrage zurück. Es funktioniert gut.Mysql: ROLLBACK für mehrere Abfragen

Allerdings, wenn die erste Abfrage funktioniert gut, aber nicht die zweite Abfrage, werfen Sie eine Ausnahme, Rollback 2., aber nicht 1. Abfrage.

Ich verwende begin_trans(), commit und rollback() für einzelne Abfragen, weil ich manchmal eine Abfrage, manchmal alle Abfragen zurücksetzen muss. Gibt es eine Möglichkeit, eine Abfrage oder alle Abfragen zurückzusetzen?

Vielen Dank im Voraus

UPDATE:

Ich habe es funktioniert, war es kein Problem mit in begin_trans(), commit und rollback(), die Datenbankverbindung Config für eine Abfrage von anderen Abfragen anders war , verrückter Code ohne Kommentare !!!

Antwort

3

Die einzige Sache, die zurückgesetzt werden muss, ist eine Schreiboperation (INSERT, UPDATE oder DELETE). Ich nehme an, dass Sie das Wort "Abfrage" verwenden, um etwas anderes als eine SELECT-Operation zu bedeuten.

Wenn mehrere SQL-Anweisungen erfolgreich sein sollen oder zusammen fehlschlagen sollen, müssen Sie transaction angeben.

UPDATE:

Jetzt bin ich verwirrt; Es ist kein Wunder, dass du es bist.

Eine Transaktion ist ein Alles-oder-Nichts-Vorschlag. Es klingt für mich so, als würden Sie zwei verschiedene Anwendungsfälle durcheinander bringen: einen, bei dem Sie eine einzelne Abfrage in einer Transaktion wünschen, und einen anderen, bei dem Sie mehrere in einer Transaktion wünschen. Die Kombination der beiden verwirrend Sie und, ich bin sicher, Ihre Benutzer.

Wenn Sie eine Transaktion ausführen, können Sie sie nicht zurückrollen. Sie müssen sich also entscheiden: Entweder ist Operation A Teil einer eigenen Transaktion oder in einer anderen mit B, C und D gruppiert. Aber nicht beide.

+0

ich aktualisierte meine Frage, schaue, ich benutze begin(), commit(), rollback() – bee

+0

ich habe es funktioniert, danke duffymo – bee

+0

Ich würde eine upvote bevorzugen und die Antwort akzeptieren, wenn es Ihnen geholfen hat Lass es dir danken. – duffymo

1

Ein Rollback wird auf alle Abfragen innerhalb der aktuellen Transaktion angewendet.

[nach Frage Update bearbeitet]

MySQL derzeit keine verschachtelte Transaktion nicht unterstützt, so dass es um alles oder nichts Sache. Sie können nur alle Abfragen innerhalb einer Transaktion zurücksetzen oder alle (erfolgreichen) übernehmen.

1

Die Art von Rollback, die man bekommt, hängt vollständig davon ab, wie man die Transaktion definiert.

Und das ist abhängig von Business-Use-Case.