[TOC] # 事务隔离级别 本节主要介绍 OceanBase 数据库的隔离级别及其设置方法。 ANSI 和 ISO/IEC 基于 SQL 标准定义了四种隔离级别,OceanBase 数据库目前支持了以下几种隔离级别: * MySQL 模式 * 读已提交(Read Committed) * 可重复读(Repeatable Read) OceanBase 数据库默认的隔离级别为读已提交(Read Committed)。 ## 设置隔离级别 设置隔离级别的方式有两种,分别为事务级别及 Session 级别: * 事务级别 ~~~ obclient> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ~~~ * Session 级别 ~~~ obclient> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE; ~~~ 设置事务的隔离级别时,应注意以下事项: * 不能在事务的执行过程中设置事务的隔离级别,否则会报以下错误。 ~~~ ERROR:ORA-01453: SET TRANSACTION must be first statement of transaction ~~~ * Session 需要维护 Session 级别的事务隔离级别,在开启事务时需要获取 Session 级别的事务隔离级别。该隔离级别可以被事务级别的隔离级别覆盖。 查看当前事务隔离级别的语句如下: ~~~ obclient> SHOW VARIABLES LIKE 'tx_isolation'; ~~~ ## 使用限制 * 内部事务 由用户事务触发的内部事务,以及维护内部表信息的事务都称为内部事务,内部事务采用 Read Committed 隔离级别。 * 跨租户事务 由于当前有一些内部表尚未拆分到普通租户下,有可能存在跨租户的事务。