トランザクションをコミットすると、トランザクションによる変更が永続的に有効になり、セーブポイントがクリアされ、トランザクションが保持しているすべてのロックが解放されます。
トランザクションのコミット
OceanBaseデータベースでは、トランザクションのコミットを明示的または暗黙的に行うことができます。明示的にトランザクションをコミットするには、COMMIT ステートメントを使用するか、コミットボタン(グラフィカルクライアントツール内)を押してトランザクションを終了する必要があります。暗黙的にトランザクションをコミットする場合、ユーザーがコミットする必要はありません。変数 autocommit の値が1の場合、OceanBaseデータベースは各ステートメントの実行後に、そのステートメントを含むトランザクションを自動的にコミットします。この場合、1つのステートメントが1つのトランザクションとなります。
説明
OceanBaseデータベースは、DDLステートメントの前後で暗黙的に COMMIT ステートメントを発行し、トランザクションもコミットします。
BEGINでトランザクションを開始し、DMLステートメントを実行した後は、COMMITでトランザクションをコミットする必要があります。トランザクションをコミットするまで、変更内容は現在のセッションにのみ可視され、他のデータベースセッションからは見えません。変更は永続化されていないため、最終的な結果ではなく、
ROLLBACKステートメントでこれらの変更をロールバックできます。トランザクションをコミットすると、変更内容がすべてのデータベースセッションに可視されます。変更結果は永続化されるため、
ROLLBACKステートメントでこれらの変更をロールバックすることはできません。
説明
トランザクション分離レベルがリピータブルリードに設定されている場合、既にトランザクションを開始しているセッションは、新しくコミットされたデータをクエリできません。トランザクション分離レベルの詳細については、トランザクション分離レベルを参照してください。
暗黙的にトランザクションを使用する場合(トランザクションの自動コミットが有効、つまり
autocommit=1の場合)、1つのSQLが1つのトランザクションとなり、トランザクションをコミットする必要はありません。SQL実行後、変更は永続化されるため、ROLLBACKステートメントでこれらの変更をロールバックすることはできません。
トランザクションの明示的なコミット
BEGIN でトランザクションを開始し、INSERT ステートメントを使用して ordr テーブルにデータを挿入します。最後に COMMIT ステートメントでトランザクションを明示的にコミットします。
obclient [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 10003 | 2022-10-19 14:51:12 |
+----+------+-------+---------------------+
3 rows in set
obclient [test]> BEGIN;
Query OK, 0 rows affected
obclient [test]> INSERT INTO ordr(id,name) VALUES(4,'JP');
Query OK, 1 row affected
obclient [test]> COMMIT;
Query OK, 0 rows affected
// 実行が成功した後、セッションを終了して再接続すると、テーブルデータが正しく挿入され、保存されていることが確認できます。
obclient [test]> exit;
$obclient -h192.168.0.0 -ut***@obbmsql#obdemo -P2883 -p****** test
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 3221487662
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 [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 10003 | 2022-10-19 14:51:12 |
| 4 | JP | NULL | 2022-10-19 14:51:44 |
+----+------+-------+---------------------+
4 rows in set
トランザクションの暗黙的コミット
変数 autocommit=1 を設定することで、自動コミットを有効にします。
obclient [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 10003 | 2022-10-19 14:51:12 |
| 4 | JP | NULL | 2022-10-19 14:51:44 |
+----+------+-------+---------------------+
4 rows in set
obclient [test]> SET autocommit=1;
obclient [test]> INSERT INTO ordr(id,name) VALUES(5,'CN');
Query OK, 1 row affected
実行が成功した後、セッションを終了して再接続すると、テーブルデータが正しく挿入され、正常に保存されていることが確認できます。
obclient [test]> exit;
$obclient -h192.168.0.0 -utpcc@obbmsql#obdemo -P2883 -p****** test
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 3221487662
Server version: OceanBase 4.0.0.0 (r100000252022102910-df01cef074936b9c9f177697500fad1dc304056f) (Built Oct 29 2022 10:27:50)
Copyright (c) 2000, 2018, OceanBase Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 10003 | 2022-10-19 14:51:12 |
| 4 | JP | NULL | 2022-10-19 14:51:44 |
| 5 | CN | NULL | 2022-10-19 14:53:56 |
+----+------+-------+---------------------+
5 rows in set