专业的网站开发,企业网站上线,青岛工程有限公司,贵州中小型营销型网站建设公司Mysql 中的 RR 事务隔离级别#xff0c;在特定的情况下会出现幻读的问题。所谓的幻读#xff0c;表示在同一个事务中的两次相同条件的查询得到的数据条数不一样。 在 RR 级别下#xff0c;什么情况下会出现幻读 这样一种情况#xff0c;在事务 1 里面通过 update 语句触发当… Mysql 中的 RR 事务隔离级别在特定的情况下会出现幻读的问题。所谓的幻读表示在同一个事务中的两次相同条件的查询得到的数据条数不一样。 在 RR 级别下什么情况下会出现幻读 这样一种情况在事务 1 里面通过 update 语句触发当前读的情况下就会导致在该事务中的前后两次查询的数据行数不一致从而出现幻读的现象。 导致幻读的根本原因是在大多数情况下快照读是通过读取已经存在的快照来获取数据的而不会触发当前读。有一种情况可以导致在 RR 隔离级别下触发当前读绕过快照读那就是使用了锁定行的语句如 SELECT ... FOR UPDATE 或 SELECT ... LOCK IN SHARE MODE。所以update 触发的当前读操作绕过了快照读从而导致 MVCC机制在当前场景下失效。最终读取到了事务 2中已经提交的数据。
预防这一特殊情况
为了避免出现这类的情况我们可以通过 for update 语句加锁。