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

MySQL-Transaktion:Commit und Rollback

1) Alle Änderungen, die Sie vornehmen, sind innerhalb derselben Transaktion sichtbar. Wenn ja

START TRANSACTION;
INSERT INTO MyTable VALUES ('Hi there');
SELECT * FROM MyTable;

Ihre Ausgabe enthält das 'Hallo'. Wenn Sie jedoch eine zweite Datenbankverbindung starten, wird die neue Zeile nicht angezeigt, bis Sie Ihre Transaktion innerhalb der ersten Verbindung festschreiben. Versuchen Sie, damit zu spielen, indem Sie zwei Datenbankverbindungen über die Befehlszeile verwenden.

Sie sehen den Effekt nicht auf Ihrer Website, weil Sie nicht dieselbe Transaktion innerhalb von zwei Datenbankverbindungen haben können (eine neue DB-Verbindung wird zu Beginn Ihrer Anfrage hergestellt).

2) Alle nicht festgeschriebenen Transaktionen werden zurückgesetzt, wenn die Verbindung mit der Datenbank geschlossen wird. Wenn dies also Ihre einzigen zwei Abfragen sind, gibt es keinen Unterschied. Es gibt jedoch einen Unterschied zwischen

START TRANSACTION;
INSERT INTO MyTable VALUES ('This one would be discarded on rollback');
ROLLBACK;
INSERT INTO MyTable VALUES ('This one will be permanent because not within transaction');  

3) Ja, das sind alle gleich.