14.5.2.2 autocommit, Commit, and Rollback

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>


原文地址:https://www.cnblogs.com/hzcya1995/p/13350127.html