• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Mysql事务隔离级别之读提交详解

    查看mysql 事务隔离级别

    mysql> show variables like '%isolation%';
    +---------------+----------------+
    | Variable_name | Value     |
    +---------------+----------------+
    | tx_isolation | READ-COMMITTED |
    +---------------+----------------+
    1 row in set (0.00 sec)

    可以看到当前的事务隔离级别为 READ-COMMITTED 读提交

    下面看看当前隔离级别下的事务隔离详情,开启两个查询终端A、B。

    下面有一个order表,初始数据如下

    mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   1 |
    +----+--------+
    1 row in set (0.00 sec)

    第一步,在A,B中都开启事务

    mysql> start transaction;
    Query OK, 0 rows affected (0.00 sec)

    第二步查询两个终端中的number值

    A

     mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   1 |
    +----+--------+
    1 row in set (0.00 sec)
    

    B

     mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   1 |
    +----+--------+
    1 row in set (0.00 sec)

    第三步将B中的number修改为2,但不提交事务

    mysql> update `order` set number=2;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    第四步查询A中的值

    mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   1 |
    +----+--------+
    1 row in set (0.00 sec)

    发现A中的值并没有修改。

    第五步,提交事务B,再次查询A中的值

    B

    mysql> commit;
    Query OK, 0 rows affected (0.01 sec)

    A

    mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   2 |
    +----+--------+
    1 row in set (0.00 sec)

    发现A中的值已经更改

    第六步,提交A中的事务,再次查询A,B的值。

    A

    mysql> commit;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   2 |
    +----+--------+
    1 row in set (0.00 sec)
    

    B

    mysql> select * from `order`;
    +----+--------+
    | id | number |
    +----+--------+
    | 13 |   2 |
    +----+--------+
    1 row in set (0.00 sec)

    发现A,B中的值都更改为2了。

    下面给一个简单的示意图


    我们可以看到,在事务隔离级别为读已提交 的情况下,当B中事务提交了之后,即使A未提交也可以读到B事务提交的结果。这样解决了脏读的问题。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • MySQL查看和修改事务隔离级别的实例讲解
    • MySQL四种事务隔离级别详解
    • MySQL 四种事务隔离级别详解及对比
    • 深入解析MySQL的事务隔离及其对性能产生的影响
    • MySQL中Innodb的事务隔离级别和锁的关系的讲解教程
    • MySQL数据库事务隔离级别介绍(Transaction Isolation Level)
    • MySQL InnoDB中的锁机制深入讲解
    • MySQL锁机制与用法分析
    • 深入理解Mysql事务隔离级别与锁机制问题
    上一篇:MySQL慢日志实践小结
    下一篇:详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Mysql事务隔离级别之读提交详解 Mysql,事务,隔离,级别,之读,