PDF (A4) - 40.5Mb
Man Pages (TGZ) - 259.5Kb
Man Pages (Zip) - 366.7Kb
Info (Gzip) - 4.1Mb
Info (Zip) - 4.1Mb
InInnoDB, all user activity occurs inside a transaction. Ifautocommit mode is enabled, each SQL statement forms a single transaction on its own. By default, MySQL starts the session for each new connection withautocommit enabled, so MySQL does a commit after each SQL statement if that statement did not return an error. If a statement returns an error, the commit or rollback behavior depends on the error. SeeSection 17.20.5, “InnoDB Error Handling”.
A session that hasautocommit enabled can perform a multiple-statement transaction by starting it with an explicitSTART TRANSACTION orBEGIN statement and ending it with aCOMMIT orROLLBACK statement. SeeSection 15.3.1, “START TRANSACTION, COMMIT, and ROLLBACK Statements”.
Ifautocommit mode is disabled within a session withSET autocommit = 0, the session always has a transaction open. ACOMMIT orROLLBACK statement ends the current transaction and a new one starts.
If a session that hasautocommit disabled ends without explicitly committing the final transaction, MySQL rolls back that transaction.
Some statements implicitly end a transaction, as if you had done aCOMMIT before executing the statement. For details, seeSection 15.3.3, “Statements That Cause an Implicit Commit”.
ACOMMIT means that the changes made in the current transaction are made permanent and become visible to other sessions. AROLLBACK statement, on the other hand, cancels all modifications made by the current transaction. BothCOMMIT andROLLBACK release allInnoDB locks that were set during the current transaction.
By default, connection to the MySQL server begins withautocommit mode enabled, which automatically commits every SQL statement as you execute it. This mode of operation might be unfamiliar if you have experience with other database systems, where it is standard practice to issue a sequence ofDML statements and commit them or roll them back all together.
To use multiple-statementtransactions, switch autocommit off with the SQL statementSET autocommit = 0 and end each transaction withCOMMIT orROLLBACK as appropriate. To leave autocommit on, begin each transaction withSTART TRANSACTION and end it withCOMMIT orROLLBACK. The following example shows two transactions. The first is committed; the second is rolled back.
$> mysql testmysql> CREATE TABLE customer (a INT, b CHAR (20), INDEX (a));Query OK, 0 rows affected (0.00 sec)mysql> -- Do a transaction with autocommit turned on.mysql> START TRANSACTION;Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO customer VALUES (10, 'Heikki');Query OK, 1 row affected (0.00 sec)mysql> COMMIT;Query OK, 0 rows affected (0.00 sec)mysql> -- Do another transaction with autocommit turned off.mysql> SET autocommit=0;Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO customer VALUES (15, 'John');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO customer VALUES (20, 'Paul');Query OK, 1 row affected (0.00 sec)mysql> DELETE FROM customer WHERE b = 'Heikki';Query OK, 1 row affected (0.00 sec)mysql> -- Now we undo those last 2 inserts and the delete.mysql> ROLLBACK;Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM customer;+------+--------+| a | b |+------+--------+| 10 | Heikki |+------+--------+1 row in set (0.00 sec)mysql>Transactions in Client-Side Languages
In APIs such as PHP, Perl DBI, JDBC, ODBC, or the standard C call interface of MySQL, you can send transaction control statements such asCOMMIT to the MySQL server as strings just like any other SQL statements such asSELECT orINSERT. Some APIs also offer separate special transaction commit and rollback functions or methods.
PDF (A4) - 40.5Mb
Man Pages (TGZ) - 259.5Kb
Man Pages (Zip) - 366.7Kb
Info (Gzip) - 4.1Mb
Info (Zip) - 4.1Mb