首页 > 数据库技术 > 详细

MySql MVCC是如何实现的-关于autocommit?

时间:2021-08-01 18:15:25      阅读:21      评论:0      收藏:0      [点我收藏+]

关于autocommit

  • 查看autocommit
show variables like ‘autocommit‘;

mysql> show variables like ‘autocommit‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
我们可以看到autocommit的值为ON,说明MySql默认是开启了自动提交事务的。什么意思呢?我们举例说明一下:

  1. 新建表
CREATE TABLE `keyvalue` (
  `key` int(11) NOT NULL AUTO_INCREMENT,
  `value` int(11) DEFAULT NULL,
  PRIMARY KEY (`key`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
  1. 在终端1中插入一条数据
insert into keyvalue(`value`)values(3);

3.在终端2中查询,这时候是可以查询到的

select * from keyvalue where `value`=3;

技术分享图片

4.修改autocommit为OFF

set session autocommit=0;

5.重新执行2-3步骤,这时候的终端2中是查不到终端1中插入的数据的,也就是终端1中插入的数据对终端2不可见。
技术分享图片

6.在终端1中提交事务,再次在终端2中查看,这时候就可以查看到了。
技术分享图片

7.总结:
1.当autocommit为ON状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交。
2.当autocommit为OFF状态时,mysql仍然会自动开启事务,但是需要用户手动提交,未提交前,A事务对数据库做的修改对B事务是不可见的。

8.思考:当autocommit为ON状态时,用户手动开启事务,mysql会不会自动提交?
答案是:不会

我们测试一下,先将autocommit设置为ON,然后在终端1手动开启一个事务,在终端2中查询,从结果来看,在未手动提交前,终端2中是查看不到的。
技术分享图片

MySql MVCC是如何实现的-关于autocommit?

原文:https://www.cnblogs.com/dwBurning/p/mysqlautocommit.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!