Die Antwort auf Ihre Frage hängt davon ab, ob Sie sich in einer Transaktion befinden, die mehr als eine Anweisung umfasst. (Sie haben die Frage mit InnoDB markiert, die Antwort wäre mit MyISAM anders.)
Aus dem Referenzhandbuch: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Standardmäßig wird MySQL mit aktiviertem Autocommit-Modus ausgeführt. Das heißt, sobald Sie eine Anweisung ausführen, die eine Tabelle aktualisiert (ändert), speichert MySQL das Update auf der Festplatte, um es dauerhaft zu machen.
Wenn Sie also nur INSERT
Datensätze verwenden, werden diese standardmäßig festgeschrieben, und es macht keinen Sinn, sie zurückzusetzen. (Dies ist praktisch dasselbe wie das Umschließen jeder Anweisung zwischen BEGIN
und COMMIT
.)
Wenn Sie sich jedoch explizit mit Transaktionen befassen, müssen Sie das COMMIT
Commit zum Speichern der Datensätze verwenden, können es jedoch auch verwenden ROLLBACK
.
Sie können eine Transaktion explizit mit START TRANSACTION
(oder BEGIN
) starten . Dies ist unabhängig von der autocommit
Einstellung (standardmäßig aktiviert):
Bei START TRANSACTION bleibt das Autocommit deaktiviert, bis Sie die Transaktion mit COMMIT oder ROLLBACK beenden. Der Autocommit-Modus kehrt dann zu seinem vorherigen Zustand zurück.
Wenn autocommit=0
ich der Meinung bin, dass eine Anweisung nach einem anderen Transaktionsende eine Transaktion startet, können Sie diese auch START TRANSACTION
explizit verwenden. so interpretiere ich das jedenfalls :
Der Autocommit-Modus. Wenn der Wert auf 1 gesetzt ist, werden alle Änderungen an einer Tabelle sofort wirksam. Bei 0 müssen Sie COMMIT verwenden, um eine Transaktion zu akzeptieren, oder ROLLBACK, um sie abzubrechen. Wenn das automatische Festschreiben 0 ist und Sie es in 1 ändern, führt MySQL ein automatisches Festschreiben aller offenen Transaktionen durch. Eine andere Möglichkeit, eine Transaktion zu starten, ist die Verwendung einer START TRANSACTION- oder BEGIN-Anweisung. Siehe auch Abschnitt 12.3.1, „START TRANSACTION, COMMIT und ROLLBACK-Syntax“.
Genauer gesagt scheint "ein anderer Weg, eine Transaktion zu beginnen" zu implizieren, dass das Setzen von "autocommit = 0" ausreicht, um eine Transaktion zu starten (zumindest kurz vor jeder Anweisung beim Start einer Sitzung oder nach einem COMMIT
/ ROLLBACK
). Ich würde vorschlagen, BEGIN
oder START TRANSACTION
explizit zu verwenden, auch wenn autocommit=0
, da es klarer machen kann, wann die Transaktion beginnt oder endet.
(Wie Sie eine Transaktion starten, hängt möglicherweise davon ab, wie Ihre Anwendung MySQL verwendet.)