解释和演示一下何为“事务的不可重复读”/“幻影读”

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

  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行,如果把这个参数设置成已提交读,就出现了幻影现象。

转载于:https://www.cnblogs.com/5945yang/p/11346468.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值