説明
このステートメントは、現在のトランザクションで完了した操作を取り消すか、不確定な分散トランザクションで完了した操作を手動で取り消すために使用します。
使用上の制限と注意事項
アプリケーション内のトランザクションを明示的に終了するには、COMMITまたはROLLBACKステートメントの使用を推奨します。トランザクションを明示的にコミットせずにプログラムが異常終了した場合、OceanBaseデータベースは最後の未コミットトランザクションをロールバックします。
権限要件
ROLLBACKステートメントの実行には権限が不要です。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。
構文
ROLLBACK [WORK][ TO [ SAVEPOINT ] savepoint_name];
パラメータの説明
パラメータ |
説明 |
|---|---|
| WORK | SQL標準互換性のために提供されるオプションパラメータです。 |
| TO SAVEPOINT | 現在のトランザクションをロールバックするセーブポイントを指定します。この句はオプションです。この句を省略した場合、ROLLBACK ステートメントはトランザクション全体をロールバックし、次の結果が発生します:
ROLLBACK と TO SAVEPOINT 句を併用すると、以下の動作を実行します:
|
例
サンプルテーブル tbl1 を作成します。
obclient> CREATE TABLE tbl1 (id INT,name VARCHAR(10),num INT);
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES (1, 'a',10),(2, 'b',20),(3, 'a',30);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM tbl1;
+------+------+------+
| ID | NAME | NUM |
+------+------+------+
| 1 | a | 10 |
| 2 | b | 20 |
| 3 | a | 30 |
+------+------+------+
3 rows in set
テーブル
tbl1を更新し、id = 3のnameをcに変更してから、現在のトランザクション全体をロールバックします。obclient> UPDATE tbl1 SET name = 'c' WHERE id = 3; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0 obclient> SELECT * FROM tbl1; +------+------+------+ | ID | NAME | NUM | +------+------+------+ | 1 | a | 10 | | 2 | b | 20 | | 3 | c | 30 | +------+------+------+ 3 rows in set obclient> ROLLBACK; Query OK, 0 rows affected obclient> SELECT * FROM tbl1; +------+------+------+ | ID | NAME | NUM | +------+------+------+ | 1 | a | 10 | | 2 | b | 20 | | 3 | a | 30 | +------+------+------+ 3 rows in set現在のトランザクションをセーブポイント
savepoint1までロールバックします。obclient> ROLLBACK TO SAVEPOINT savepoint1; Query OK, 0 rows affected