PostgreSQL中repeatable read事务隔离级别为什么不会出现幻读 | 您所在的位置:网站首页 › 立刻怎么念 › PostgreSQL中repeatable read事务隔离级别为什么不会出现幻读 |
在查看PostgreSQL-11.5官方文档的时候发现,pg中repeatable read隔离级别下是不会出现幻读的。如下图标红处所示: PostgreSQL事务隔离级别 什么是幻读? 下面是官方的解析: phantom read A transaction re-executes a query returning a set of rows that satisfy a search condition and finds that the set of rows satisfying the condition has changed due to another recently-committed transaction. 大概意思指在一个事务中相同的SQL查询条件前后读取到的结果不一致,原因是后者读取到了其他事务中新提交的数据。 数据读取,实际上读取的是一种状态数据;数据库中所说的“事务”,可以理解为数据在某个时间的一致性状态,每当产生一个新的事务,数据将从上一个事务的状态进入到新事务中的状态。“事务快照”本质上代表的是某个时刻数据状态的一个定格。 一、事务快照介绍 事务快照transaction snapshot,表示某个时刻事务的状态。既然是状态,我在这里对事务快照的理解为三个阶段:一个transaction snapshot将事务划分为过去的、当前的、未来的三个范围区域。 PostgreSQL中事务快照的状态信息包括如下内容: xmin,当前处于active状态的最小事务编号; xmax,未来产生的事务中,第一个被分配的事务编号; xip_list,当前处于active 状态的事务列表。 如下,查看当前时刻事务快照: (postgres@[local]:5432)[akendb01]#select txid_current_snapshot();txid_current_snapshot-----------------------639:642:639,640 |
CopyRight 2018-2019 实验室设备网 版权所有 |