トランザクションをコミットすると、トランザクションの変更が永続的に有効になり、セーブポイントがクリアされ、トランザクションが保持しているすべてのロックが解放されます。
トランザクションのコミット
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