本記事は、トランザクションの基本情報と関連する制御文について主に説明します。
トランザクションの概要
データベーストランザクションには、データベース上の一連の操作が含まれます。トランザクションはデータベースをある一貫性した状態から別の一貫した状態に変換します。通常、トランザクション内のSQLには、DMLステートメントとクエリステートメントの両方が含まれます。トランザクション内のSQLがクエリステートメントのみの場合、このトランザクションは通常読み取り専用トランザクションと呼ばれます。
トランザクションがコミットされる前であれば、ROLLBACK コマンドを使用してトランザクションをロールバックすることができます。トランザクションの詳細については、トランザクションの概要を参照してください。
トランザクション制御文
基本的なトランザクション制御文は以下のとおりです:
BEGIN:明示的にトランザクションを開始します。このステートメントは、使用時にオプションです。テナントセッションのシステム変数
autocommitの値が0の場合、トランザクションの自動コミット機能が無効になり、複数のSQL文を1つのトランザクションとして識別するために、明示的にBEGINコマンドを発行する必要はありません。テナントセッションのシステム変数
autocommitの値が1の場合、トランザクションの自動コミット機能が有効になります。このモードでは、各SQL文は独立したトランザクションになります。複数のSQLを1つのトランザクションとしてまとめるには、BEGINコマンドで明示的にトランザクションを開始し、同時に自動コミット機能を無効にします。COMMITまたはROLLBACKステートメントを実行するまで、自動コミットモードには戻りません。
SAVEPOINT:トランザクション内に「セーブポイント」をマークすることができ、後でこのセーブポイントまでロールバックすることが可能です。セーブポイントはオプションであり、1つのトランザクション内で複数のセーブポイントを設定することもできます。COMMIT:現在のトランザクションをコミットして終了し、トランザクションのすべての変更を永続的に有効化します。またすべてのセーブポイントを削除し、トランザクションが保持されているロックを解除します。ROLLBACK:トランザクション全体で既に行われた変更をロールバックする、または特定のセーブポイントより後に行われた変更のみをロールバックします。また、ロールバックした部分に含まれるすべてのセーブポイントを削除し、トランザクションに保持されているロックを解除します。
OBClientコマンド環境では、SQLプロンプトの後にトランザクション制御コマンドを発行できるほか、セッションレベルの autocommit パラメータを変更することで、トランザクションを自動コミットするかどうかを制御することができます。
SET autocommitで変数を設定すると、現在のセッションに対して即時有効になりますが、接続が切断されると設定した変数は無効になります。SET GLOBAL autocommitでテナントレベルの変数を設定した場合は、設定を反映させるために、一度接続を切断して再接続する必要があります。説明
セッション内の変数
autocommitの値が0で、明示的にトランザクションがコミットしていない場合、プログラムが異常終了すると、OceanBaseデータベースは自動的に最後のコミットされていないトランザクションをロールバックします。