首批通过分布式安全可靠测评,为关键业务系统打造
提交事务
更新时间:2026-03-25 10:34:15
提交一个事务会让事务的修改持久化生效,清除保存点并释放事务所持有的所有锁。
提交事务
OceanBase 数据库 Oracle 模式的提交事务可以显式使用也可以隐式使用。显式地提交事务,需要使用 COMMIT 语句或者使用提交按钮(在图形化客户端工具中)结束事务;隐式提交事务时不需要主动提交,当系统变量 autocommit 的值为 1 时,每条语句执行结束后,OceanBase 数据库即会自动地将这条语句所在的事务提交,一条语句就是一个事务。
说明
OceanBase 数据库会在 DDL 语句前和后隐式地发起一个 COMMIT 语句,也会提交事务。
如果使用
BEGIN开启一个事务,执行 DML 语句后,需要使用COMMIT提交事务。在您提交事务之前,您的修改只对当前会话可见,对其他数据库会话是不可见的;您的修改没有持久化,所以不是最终的结果,可以用
ROLLBACK语句回滚这些修改。在您提交事务之后,您的修改对所有数据库会话可见。您的修改结果持久化成功,不可以用
ROLLBACK语句回滚这些修改。
说明
如果事务隔离级别设置了可重复读,则已经开启事务的会话无法查询到新提交的数据。事务隔离级别的更多介绍请参见 事务隔离级别。
如果隐式地开启事务(开启了自动提交事务,即
autocommit的值为1),则一条 SQL 就是一个事务,不再需要提交事务。SQL 执行后您的修改即持久化成功,不可以用ROLLBACK语句回滚这些修改。
显示提交事务示例
以下示例通过 BEGIN 开始一个事务,然后使用 INSERT 在表 ordr 中插入数据,最后通过 COMMIT 语句提交。
obclient [SYS]> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
+----+------+-------+------------+
3 rows in set
obclient [SYS]> BEGIN;
Query OK, 0 rows affected
obclient [SYS]> INSERT INTO ordr(id,name) VALUES(4,'JP');
Query OK, 1 row affected
obclient [SYS]> COMMIT;
Query OK, 0 rows affected
执行成功后,退出会话再重新连接,发现表数据已正确插入并保存成功。
obclient [SYS]> exit;
$obclient -h192.168.0.0 -utpcc@obbmsql#obdemo -P2883 -p******
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 3221487661
Server version: OceanBase 4.0.0.0 (r100000252022102910-df01cef074936b9c9f177697500fad1dc304056f) (Built Oct 29 2022 10:27:50)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [SYS]> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
| 4 | JP | NULL | 03-NOV-22 |
+----+------+-------+------------+
4 rows in set
隐式提交事务示例
以下示例,通过配置变量 autocommit=1,开启自动提交。
obclient [SYS]> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
+----+------+-------+------------+
4 rows in set
obclient> SET autocommit=1;
Query OK, 1 row affected
INSERT INTO ordr(id,name) VALUES(4,'JP');
Query OK, 1 row affected
执行成功后,退出会话再重新连接,发现表数据已正确插入并保存成功。
obclient [SYS]> exit;
$obclient -h192.168.0.0 -utpcc@obbmsql#obdemo -P2883 -p******
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 3221487664
Server version: OceanBase 4.0.0.0 (r100000252022102910-df01cef074936b9c9f177697500fad1dc304056f) (Built Oct 29 2022 10:27:50)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [SYS]> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
| 4 | JP | NULL | 03-NOV-22 |
+----+------+-------+------------+
4 rows in set