Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rails-Transaktionen

Wenn Sie eine Mischung aus Code haben, der explizite Transaktionen erfordert, und Code, der sich auf Autocommit verlassen kann, sollten Sie Autocommit vielleicht nicht für alle Verbindungen deaktivieren. Sie sind auf dem richtigen Weg und fragen sich, ob sich dies auf anderen Code auswirkt. Wenn Sie Autocommit deaktivieren, aber der andere Code nicht weiß, dass er übergeben werden muss, damit seine Arbeit festgeschrieben wird, dann ist das ein Problem. Nicht festgeschriebene Arbeit wird zurückgesetzt, wenn die Verbindung geschlossen wird.

Sie sollten sich darüber im Klaren sein, dass die Standardspeicher-Engine für MySQL MyISAM , die überhaupt keine Transaktionen unterstützt. Wenn Sie Änderungen an einer Tabelle vornehmen, die MyISAM verwendet, werden die Änderungen sofort effektiv festgeschrieben, unabhängig von Ihren ausdrücklichen Anfragen zum Beginnen und Beenden von Transaktionen und unabhängig vom Status des Autocommits. Sie können also unter keinen Umständen ein Rollback durchführen, es sei denn, Sie haben Ihre Tabellen mit InnoDB Speicher-Engine (oder andere transaktionssichere Speicher-Engines wie BDB ).

Es ist unnötig um den Autocommit-Modus zu deaktivieren, um Transaktionen in MySQL zu verwenden. Starten Sie einfach explizit eine Transaktion. Die folgenden SQL-Anweisungen sind Teil einer Transaktion, bis Sie diese Transaktion festschreiben oder rückgängig machen, unabhängig vom Wert von autocommit für Ihre aktuelle Verbindung.

http://dev.mysql.com/doc/refman/5.0 /en/commit.html sagt: