説明
このステートメントを使用して、現在のトランザクションを終了し、トランザクション内で実行されたすべての変更を永続的に有効にします。また、このステートメントはトランザクション内のすべてのセーブポイントをクリアし、トランザクションロックを解除します。
制限事項と注意点
トランザクションをコミットする前に、変更されたテーブルを照会することで、そのトランザクション内で行われた変更を確認できますが、他のユーザーにはこれらの変更は表示されません。トランザクションをコミットすると、変更内容はコミット後に実行される他のユーザーのステートメントに対して可視化されます。
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