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中是查看不到的。

    牛人之所以是牛人,是因为你现在在踩的坑,他曾经都已经踩过了。
  • 相关阅读:
    spark streaming 整合kafka(二)
    JAVA设计模式之动态代理
    使用org.apache.commons.cli包来设计JAVA命令行工具
    HTML教程
    Java InputStream和Reader
    Java IO
    程序员怎么把自己的招牌打出去?
    Java设计模式之单例模式
    JAVA NIO
    Java文件流字节流和字符流的区别
  • 原文地址:https://www.cnblogs.com/dwBurning/p/mysqlautocommit.html
Copyright © 2011-2022 走看看