热点新闻
mysql的MVCC机制
2023-07-05 07:17  浏览:4549  搜索引擎搜索“微商筹货网”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在微商筹货网看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

面试问题:如果两个客户端同时执行一个查询sql,为什么查出的数据可能不一样?

解答:是因为mysql底层维护了一个undo日志版本链和read-view一致性试图机制,在repeatable-read隔离级别下,一个事务开启之后,当执行查询语句的时候,就生成了一个read-view,之后查询就会根据一定的规则去undo日志版本链中比对数据;在read-commited隔离级别下,一个事务开启之后,每次执行查询语句的时候,都生成新的read-view,查询就会根据和repeatable-read隔离级别下一样的规则去undo日志版本链中比对数据。

对比规则如下:

如果版本链中的trx_id<min_id,说明当前事务可见;

如果版本链中的trx_id>max_id,说明当前事务不可见;

如果版本链中的min_id<=trx_id<=max_id,存在两种判断。

        若版本链中的trx_id位于数组中,则说明这个版本是由未提交的事务生成,不可见。

        若版本链中的trx_id不在数组中,说明这个版本是由已提交的事务生成,可见。


如下例:







分析:







发布人:4f51****    IP:101.229.16.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发