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