zoukankan      html  css  js  c++  java
  • MySql MVCC是如何实现的-关于autocommit?

    关于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.在终端1中修改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中是查看不到的。

    牛人之所以是牛人,是因为你现在在踩的坑,他曾经都已经踩过了。
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    redis被攻击,怎么预防
    Redis3.2.12单节点安装
    Linux安装Redis、后台运行、系统自启动
    Redis 密码设置和查看密码
    Redis protected-mode属性解读
    SpringCloud(9)----mysql实现配置中心
    SpringCloud(8)----zuul权限校验、接口限流
  • 原文地址:https://www.cnblogs.com/dwBurning/p/mysqlautocommit.html
Copyright © 2011-2022 走看看