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