14.5.2.2 autocommit, Commit, and Rollback 在InnoDB,所有的用户活动发生在一个事务里, 如果自动提交模式是启用的,每个SQL语句形成一个单独的事务。默认情况下, MySQL开启一个session用于每个新的连接在自动提交启用的情况下,因此MySQL 做一个提交在每个SQL语句如果语句不返回错误。一个session 启用自动提交可以执行一个多语句的事务通过使用一个显示的START TRANSACTION or BEGIN statement 结束使用COMMIT or ROLLBACK statement.如果自动提交模式是被禁用 使用一个会话 SET autocommit = 0,session 总是会打开一个事务会话。 一个COMMIT 或者ROLLBACK语句 结束当前的事务 然后开启一个新的如果一个会话有自动提交关闭 结束没有一个显示的提交最终的事务, MySQL 回滚那个事务某些语句显示的借宿事务,如果你做了一个commit 在执行语句前使用事务匹配提交:默认情况下,一个连接到MySQL server 会开启自动提交,这个会自动提交每个SQL语句当你执行它时。这种操作的模式可能不熟悉如果你有其他数据库的经验, 是标准的执行一系列DML语句 提交它们或者回滚它们使用多语句事务,切换自动提交关闭使用SQL语句SET autocommit = 0 然后结束事务使用COMMIT 或者ROLLBACK 。如果开启自动提交, 开始每个事务 使用 START TRANSACTION 使用COMMIT或者ROLLBACK结束下面的例子显示2个事务,第1个是提交的,第2个是回滚的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>