【OBCP 每日一问】事务隔离级别深挖,这道 "正确的是" 你敢选吗?

题目: 关于 OceanBase 的事务隔离级别与并发控制机制,以下说法正确的是?

A. OceanBase 默认隔离级别为可重复读(Repeatable Read),与 MySQL InnoDB 一致,通过间隙锁(Gap Lock)防止幻读

B. OceanBase 读已提交(Read Committed)隔离级别下,同一事务内每条 SELECT 语句都会获取新的已提交快照,因此可能出现不可重复读现象

C. OceanBase 可重复读隔离级别下,事务在第一条语句时获取快照时间戳,事务内所有读都基于该快照,因此既不会出现不可重复读,也不会出现幻读和写偏序(Write Skew)

D. OceanBase 序列化(Serializable)隔离级别采用乐观并发控制(OCC),事务在提交时统一进行冲突检测,因此读操作全程不加锁

B. OceanBase 读已提交(Read Committed)隔离级别下,同一事务内每条 SELECT 语句都会获取新的已提交快照,因此可能出现不可重复读现象

在读已提交(RC)隔离级别下,OceanBase 采用语句级快照 (Statement Snapshot):每条 SQL 语句在开始执行时,都会获取当前最新的已提交事务版本号作为自己的读快照。 因此,同一事务内先后执行的两条 SELECT,如果中间有其他事务提交了对应数据的修改,两条语句读到的结果可能不同,即会出现不可重复读现象 。这正是 RC 隔离级别的标准行为。