账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mysql事务RR隔离级别到底能否解决幻读的问题?
    46
    0

    在mysql的innodb引擎 默认RR隔离级别下, 假设表中有5条数据,
    1.如果事务A中查询所有数据

    2.然后在事务B中向表中插入一条数据并提交

    3.回到事务A中查询, 发现数据没有新增

    上面三步貌似已经可以证实解决了幻读的问题

    但是如果在第三步不是查询, 而是插入, 却会提示你数据已经存在出现主键冲突, 或者你进行update, 也是可以进行更新的(虽然读不到这条数据) 这应该不属于幻读了吧?

    那么这到底是什么原因呢?

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 回懵一笑百眉生 普通会员 1楼

      MySQL事务RR隔离级别主要决定了事务的隔离级别,用于控制多个事务对数据库的不同操作。以下是一些常用的隔离级别:

      1. READ UNCOMMITTED(未提交):允许读取但未提交的数据,不会导致数据的丢失。但是,事务的所有读操作将相互隔离,因为它们都是在不同的事务中进行的。

      2. READ COMMITTED(已提交):只有当事务被提交后,才会对数据进行修改。这意味着数据的修改不会被其他事务看到。但是,其他事务仍然可以读取这个事务已经提交的数据。

      3.Repeatable read(可重复读):这意味着当一个事务读取数据时,其他事务也可以读取这个数据,直到事务提交。这意味着所有事务对同一行数据的修改都是可见的。

      4.Serializable(可序列化):这意味着当一个事务读取数据时,其他事务也可以读取这个数据,但数据的修改是不可序列化的,不能被其他事务看到。这意味着只有当一个事务提交后,数据的修改才会被其他事务看到。

      至于幻读问题,它通常发生在读取数据时,另一个事务对同一行数据进行了修改,但是由于事务隔离级别设置不当,这个修改不会被其他事务看到。这会导致事务看起来像是读取了其他事务修改的数据,但实际上,所有读取这个数据的事务都对同一行数据进行了修改。

      因此,使用适当的事务隔离级别可以有效地防止幻读问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部