mysql:set autocommit=0与start transaction

Posted neozheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql:set autocommit=0与start transaction相关的知识,希望对你有一定的参考价值。

set autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务。

 

1、不管autocommit 是1还是0 
     START TRANSACTION 后,只有当commit数据才会生效,ROLLBACK后就会回滚。

 

2、当autocommit 为 0 时
    不管有没有START TRANSACTION。
    只有当commit数据才会生效,ROLLBACK后就会回滚。

 

3、如果autocommit 为1 ,并且没有START TRANSACTION 。
    调用ROLLBACK是没有用的。即便设置了SAVEPOINT。

 

对于 InnoDB 来说,select也是开事务的:

Remember that even a SELECT statement opens a transaction 

用一个闲置的 mysql 服务器做以下测试:

-- step1: 
SET autocommit = 0; -- 关闭自动提交;
-- step2: 
SELECT * FROM table_name; -- 执行查询语句 ;
-- step3: 
SELECT * FROM information_schema.INNODB_TRX;  --  查看正在运行的事务,此时你应该会看到一条记录,这条记录的 TRX_STARTED 就是 step2 的执行时间;
-- step4: COMMIT; -- step3 产生的那条记录消失。

 

 

参考链接:

https://www.cnblogs.com/lhp2012/p/5315928.html

https://segmentfault.com/q/1010000021044948/

 

以上是关于mysql:set autocommit=0与start transaction的主要内容,如果未能解决你的问题,请参考以下文章

mysql中set autocommit=0与start transaction区别

set autocommit

mysql禁用autocommit,以及遇到的问题(转)

Mysql中的锁

mysql事务——控制语句使用

mysql 中 SET autocommit=1 和 START TRANSACTION 之间的区别(我错过了啥吗?)