Spec-Zone .ru
спецификации, руководства, описания, API

5.4.2. Grouping DML Operations with Transactions

By default, connection to the MySQL server begins with autocommit 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 of DML statements and commit them or roll them back all together.

To use multiple-statement transactions, switch autocommit off with the SQL statement SET autocommit = 0 and end each transaction with COMMIT or ROLLBACK as appropriate. To leave autocommit on, begin each transaction with START TRANSACTION and end it with COMMIT or ROLLBACK. The following example shows two transactions. The first is committed; the second is rolled back.

shell> 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 as COMMIT to the MySQL server as strings just like any other SQL statements such as SELECT or INSERT. Some APIs also offer separate special transaction commit and rollback functions or methods.