zoukankan      html  css  js  c++  java
  • 解释和演示一下何为“事务的不可重复读”/“幻影读”

    不可重复读(幻影现象)可重复读

      MySQL默认情况下是可重复读,解决了幻影问题

        mysql> show variables like ‘%tx%’;

        +-----------------------+--------------------------+

        | Variables_name |  Value          |

        +------------------------+--------------------------+

        | tx_isolation     |REPEATABLE-READ |

        | tx_read_only    | OFF            |

        +------------------------+---------------------------+

      改成 read-committed(已提交读)后,出现幻影读

        mysql> set @@session.tx_isolation = 'READ-COMMITTED';

        Query OK, 0 rows affected (0.00 sec)

    演示幻影读:

      A:设置隔离级别为已提交读:

        mysql> set @@session.tx_isolation = 'READ-COMMITTED';

        Query OK, 0 rows affected (0.00 sec)

      对这4行数据加了锁:对表加is锁,对4行加x行锁,事务没有提交

        mysql> select * from t2 where name=abcfor uodate;

        +------+---------+

        |id  | name |

        +------+---------+

        |1  | ABC |

        |3  |abc |

        |8  |ABC |

        |10 |abc |

        +------+---------+

        4 rows in set (0.01 sec)

      B:设置隔离级别为已提交读:

        mysql> set @@session.tx_isolation = 'READ-COMMITTED';

        Query OK, 0 rows affected (0.00 sec)

      对t2表插入 name abc 的数据,成功了:

        mysql> insert into t2(name) values(‘abc’);

      A:再去执行,发现成了5nameabc的数据:

        mysql> select * from t2 where name=abcfor uodate;

        +------+---------+

        |id  | name |

        +------+---------+

        |1  | ABC  |

        |3  |abc   |

        |8  |ABC  |

        |10 |abc   |

        |16| abc   |

        +------+---------+

        4 rows in set (0.01 sec)

      一会4行,一会5行,如果把这个参数设置成已提交读,就出现了幻影现象。

  • 相关阅读:
    【linux 文件管理】7-文件重定向
    by David Bombal CCNA with kali linux
    【linux 文件管理】6-软链接和硬链接
    13.mysql索引的使用
    11.mysql SQL优化之SQL问题定位
    mysql服务常用命令
    10.mysql存储引擎
    9. Mysql的体系结构概览
    8.mysql触发器
    项目上线部署
  • 原文地址:https://www.cnblogs.com/5945yang/p/11346468.html
Copyright © 2011-2022 走看看