次の方法で共有


ロールバック

適用対象: チェック マークあり Databricks SQL

トランザクションの開始以降に行われたすべての変更を破棄して、現在のトランザクションをロールバックします。 対話型トランザクションの要件と使用パターンについては、「 対話型トランザクション」を参照してください。

構文

ROLLBACK [ TRANSACTION | WORK ]

パラメーター

このステートメントにはパラメーターがありません。

メモ

  • アクティブなトランザクションがない場合、 ROLLBACK を実行してもエラー は発生しません
  • トランザクション内の操作でエラーが発生した場合、トランザクションは中止状態になります。 後続の読み取り操作と書き込み操作は、トランザクションがユーザーによって明示的にロールバックされるまで、エラーで拒否されます。
  • このステートメントを実行するには、アクティブなトランザクションと、トランザクション内で読み取りまたは変更されたすべてのオブジェクトに対する適切なアクセス許可が必要です。

例示

次の例は、対話型トランザクションをロールバックする方法を示しています。

基本的なロールバック

各ステートメントを個別のセルで実行します。

BEGIN TRANSACTION;
-- Attempt an insert operation
INSERT INTO my_table VALUES (1, 'incorrect-value');
-- After discovering the mistake, rollback the transaction
-- (no changes are actually made to the tables)
ROLLBACK TRANSACTION;

実行エラーの処理

トランザクション内のステートメントが失敗した場合は、新しいトランザクションを開始する前に明示的にロールバックする必要があります。 各ステートメントを個別のセルで実行します。

BEGIN TRANSACTION;
-- A query that causes a division by zero error
SELECT 1/0;
-- Throws error asking user to roll back the transaction
SELECT 1;
-- After error, user must roll back the transaction
-- as it cannot be committed
ROLLBACK TRANSACTION;

パーサー エラーの処理

パーサー エラーには、明示的なロールバックも必要です。 各ステートメントを個別のセルで実行します。

BEGIN TRANSACTION;
-- A query that causes a parsing error
SELLLLLLECT 1;
-- Throws error asking user to roll back the transaction
SELECT 1;
-- After error, user must roll back the transaction
-- as it cannot be committed
ROLLBACK TRANSACTION;

条件付きロールバック

ビジネス ルールに基づく条件付きロジックには、 ROLLBACK を使用できます。 各ステートメントを個別のセルで実行します。

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Check a condition and rollback if not met
BEGIN
  DECLARE total_balance INT;
  SET total_balance = (SELECT SUM(balance) FROM accounts);

  IF total_balance < 0 THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF;
END;

コミットが失敗した後にロールバックする

COMMITが失敗した場合は、明示的にロールバックする必要があります。 各ステートメントを個別のセルで実行します。

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Attempt to commit
COMMIT;
-- If COMMIT fails (e.g., due to write conflict),
-- the transaction is aborted
-- You must explicitly roll back before starting a new transaction
ROLLBACK;