事务隔离级别 
===========================

本节主要介绍 OceanBase 数据库的隔离级别及其设置方法。

ANSI 和 ISO/IEC 基于 SQL 标准定义了四种隔离级别，OceanBase 数据库目前支持了以下几种隔离级别：

* MySQL 模式

  * 读已提交（Read Committed）

    
  
  * 可重复读（Repeatable Read）

    
  

  




OceanBase 数据库默认的隔离级别为读已提交（Read Committed）。

设置隔离级别 
---------------------------

设置隔离级别的方式有两种，分别为事务级别及 Session 级别：

* 事务级别

  ```sql
  obclient> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  ```

  

*
  Session 级别

  ```sql
  obclient> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
  ```

  




设置事务的隔离级别时，应注意以下事项：

* 不能在事务的执行过程中设置事务的隔离级别，否则会报以下错误。

  ```sql
  ERROR:ORA-01453: SET TRANSACTION must be first statement of transaction
  ```

  

* Session 需要维护 Session 级别的事务隔离级别，在开启事务时需要获取 Session 级别的事务隔离级别。该隔离级别可以被事务级别的隔离级别覆盖。

  查看当前事务隔离级别的语句如下：

  ```sql
  obclient> SHOW VARIABLES LIKE 'tx_isolation';
  ```

  




使用限制 
-------------------------

* 内部事务

  由用户事务触发的内部事务，以及维护内部表信息的事务都称为内部事务，内部事务采用 Read Committed 隔离级别。
  

* 跨租户事务

  由于当前有一些内部表尚未拆分到普通租户下，有可能存在跨租户的事务。
  



