説明
このステートメントは、現在のトランザクションで完了した作業を取り消すため、または不確定な分散トランザクションで完了した作業を手動で取り消すために使用されます。
制限事項と注意点
アプリケーション内のトランザクションを明示的に終了するには、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