ToB企服应用市场:ToB评测及商务社交产业平台

标题: 解决MySQL中的幻读题目 [打印本页]

作者: 我爱普洱茶    时间: 2024-9-11 12:01
标题: 解决MySQL中的幻读题目
MySQL 利用InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重复读),通过MVCC和Next-key锁机制来防止幻读。
解决幻读的方法

1. 快照读

如果是普通的 select 语句:利用MVCC(快照读)MVCC依靠利用Read View和聚簇索引纪录中的两个隐藏列工作。
Read View 四个紧张的字段:

两个隐藏列:对于利用 InnoDB 存储引擎的数据库表,它的聚簇索引纪录中都包罗下面两个隐藏列:


在事件启动创建 Read View 后,我们可以将纪录中的 trx_id 分别这三种环境:
一个事件去访问纪录的时间,除了自己的更新纪录总是可见之外,另有这几种环境:

2. 当前读

如果实行的是下列语句,就是当前读(锁定读)

在当前读下,读取的是数据的最新版本,当前读会对读取到的纪录加Next-key Lock 锁,来防止其它事件在间隙间插入数据

只管有以上两种方法,仍然不能完全解决幻读题目,两个发生幻读的场景

以是,MySQL 可重复读隔离级别并没有彻底解决幻读,只是很大程度上而不能完全避免幻读征象的发生。要避免这类特殊场景下发生幻读的征象的话,就是尽量在开启事件之后,马上实行 select … for update 这类当前读的语句,由于它会对纪录加 next-key lock,从而避免其他事件插入一条新纪录。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4