事务概述 
=========================

本节主要介绍事务的定义以及基本的事务控制语句。

事务指的是一序列 SQL 语句，OceanBase 数据库将这组 SQL 语句当作一个整体，要么全部执行成功，要么全部不成功；不会出现部分 SQL 语句执行成功，或者部分 SQL 未执行成功的场景。

通常事务中的 SQL 会包含 DML 语句，也会包含查询语句。如果一个事务中的 SQL 只有查询语句，这个事务通常称为只读事务。

基本的事务控制语句有：

* BEGIN：显式开启一个事务。该命令为可选，如果租户会话的参数 `autocommit` 的值为 `off` ，即关闭自动提交事务功能，则不需要显式发出这个命令；如果参数 `autocommit` 的值为 `on` ，即开启自动提交事务功能，则每条 SQL 就是一个独立的事务；如果要多个 SQL 组成一个事务，需要显式发起 BEGIN 命令。

  

* SAVEPOINT：在事务过程中标记一个"保存点"，事务可以事后选择回滚到这个点。保存点是可选的，一个事务过程中也可以有多个保存点。

  

* COMMIT：结束当前事务，让事务所有修改持久化并生效，清除所有保存点和释放事务持有的锁。

  

* ROLLBACK：回滚整个事务已做的修改或者只回滚某个保存点之后事务已做的修改，清除回滚部分包含的所有保存点和释放事务持有的锁。

  




如果您使用的是 OBClient 工具，您可以在 SQL 提示符后发起事务控制命令，也可以通过修改会话级别的 `autocommit` 参数设置是否自动提交事务。如果修改的是租户级别的 `autocommit` 参数，则需要断开会话重新连接才会生效。

如果您使用的是图形化客户端工具，例如 DBeaver，您可以在 SQL 编辑窗口里发起事务控制命令，或者在工具栏上单击提交和回滚的图标。
**说明**



如果会话级的 `autocommit` 变量的值为 `off`，并且没有显式地提交事务，则当程序异常中断时，OceanBase 数据库会自动回滚最后一个未提交的事务。建议显式地提交事务或者回滚事务。
