本記事では、トランザクションの基本情報と関連する制御文について説明します。
トランザクションの概要
データベーストランザクションは、データベースに対する一連の操作を含みます。トランザクションにより、データベースは一貫性のある状態から別の一貫性のある状態へと移行します。通常、トランザクション内の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データベースは最後の未コミットのトランザクションを自動的にロールバックします。