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 test mysql> 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>