首批通过分布式安全可靠测评,为关键业务系统打造
事务隔离级别概述
更新时间:2023-07-18 17:25:59
隔离级别是根据事务并发执行过程中必须防止的现象来定义的。
可防止的现象包括:
脏读(Dirty Read):一个事务读到其他事务尚未提交的数据。
不可重复读(Non Repeatable Read):曾经读到的某行数据,再次查询发现该行数据已经被修改或者删除。例如:
select c2 from test where c1=1;第一次查询c2的结果为1,再次查询由于其他事务修改了c2的值,因此c2的结果为2。幻读(Phantom Read):只读请求返回一组满足搜索条件的行,再次执行发现另一个提交的事务已经插入满足条件的行。
基于上述三种现象,ANSI 和 ISO/IEC 定义了四种隔离级别,这四种隔离级别如下:
读未提交(Read Uncommitted)
读已提交(Read Committed)
可重复读(Repeatable Read)
可串行化(Serializable)
四种隔离级别比较如下所示。
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | 可能 | 可能 | 可能 |
| 读已提交 | 不会 | 可能 | 可能 |
| 可重复读 | 不会 | 不会 | 可能 |
| 可串行化 | 不会 | 不会 | 不会 |
OceanBase 数据库目前支持了以下几种隔离级别:
Oracle 模式
读已提交(Read Committed)
可重复读(Repeatable Read)
可串行化(Serializable)
MySQL 模式
读已提交(Read Committed)
可重复读(Repeatable Read)
可串行化(Serializable)
该隔离级别类似 Oracle 数据库的 Serializable,并非严格意义上的 Serializable。
OceanBase 数据库默认的隔离级别为读已提交(Read Committed)。