説明
このステートメントを使用して、現在のトランザクションを終了し、トランザクション内で実行されたすべての変更を永続的に有効にします。また、トランザクション内のすべてのセーブポイントをクリアし、トランザクションロックを解除します。
使用上の制限と注意事項
トランザクションをコミットする前に、変更されたテーブルをクエリすることで、そのトランザクション内で行われた変更を確認できますが、他のユーザーはこれらの変更を見ることができません。トランザクションをコミットすると、変更はコミット後に実行される他のユーザーのステートメントで可視化されます。
ROLLBACK ステートメントを使用して、トランザクション内で行われた変更をロールバック(取り消し)できます。
OceanBaseデータベースは、以下の場合に暗黙的なCOMMITを自動的に実行します:
- 構文上正しい任意のデータ定義言語(DDL)ステートメントの実行前、そのステートメントがエラーを引き起こした場合でも;
- 無誤で完了した任意のデータ定義言語(DDL)ステートメントの後。
このステートメントは、以下の目的で使用することもできます:
- 不確定な状態にある分散トランザクションを手動でコミットする場合;
- SET TRANSACTIONステートメントで開始された読み取り専用トランザクションを終了する場合。
OceanBaseは、アプリケーション内で COMMIT または ROLLBACK ステートメントを使用して、最後のトランザクションを含む各トランザクションを明示的に終了し、その後OceanBaseデータベースとの接続を切断することを推奨します。トランザクションを明示的にコミットせずにプログラムが異常終了した場合、最後にコミットされていないトランザクションは自動的にロールバックされます。
ほとんどのOceanBaseツールやユーティリティの正常な終了操作は、現在のトランザクションをコミットします。一方、OceanBaseプリコンパイラプログラムの正常な終了操作はトランザクションをコミットせず、OceanBaseデータベースに依存して現在のトランザクションをロールバックします。
権限要件
COMMIT ステートメントの実行には、特別な権限は必要ありません。OceanBaseデータベースの権限に関する詳細は、Oracleモードの権限分類を参照してください。
構文
COMMIT [ WORK ] [ COMMENT 'string' ];
パラメータの説明
パラメータ |
説明 |
|---|---|
| WORK | SQL標準互換性のために提供されるオプションパラメータです。COMMIT; ステートメントと COMMIT WORK; ステートメントは同等です。 |
| COMMENT | 現在のトランザクションをコミットし、それに関連するコメントを付加します。このコメントは、分散トランザクションの障害診断に役立ちます。 説明 ネットワークやマシンの障害によりこの分散トランザクションが正常にコミットできない場合、OceanBaseデータベースはそのコメントをトランザクションIDと共にデータディクショナリに格納します。コメントは障害が発生したアプリケーションを示し、トランザクションをコミットしたデータベース管理者への連絡先情報を提供します。 |
例
まず、テーブル
tbl1を作成します:obclient> CREATE TABLE tbl1 ( id INT PRIMARY KEY, name VARCHAR(50), value INT ); Query OK, 0 rows affectedテーブル
tbl1に1行のデータを挿入し、この変更をコミットします:obclient> INSERT INTO tbl1 VALUES (1, 'a', 10); Query OK, 1 row affected obclient> COMMIT; Query OK, 0 rows affected現在のトランザクションをコミットし、関連するコメントを追加します:
obclient> COMMIT COMMENT 'Transaction code 001 in question, Please contact Zhang XX'; Query OK, 0 rows affected