説明
このステートメントは、トランザクションをコミットする前にセーブポイントを作成し、トランザクションの一部をロールバックできるようにします。
説明
- セーブポイント名は同一トランザクション内で一意であり、後に作成された同名のセーブポイントが前のものを上書きします。
- セーブポイントを作成した後、処理を続けたり、作業をコミットしたり、トランザクション全体をロールバックしたり、またはトランザクションを指定されたセーブポイントまでロールバックしたりできます。トランザクションのロールバックの詳細については、ROLLBACKを参照してください。
構文
SAVEPOINT savepoint_name
パラメータの説明
| パラメータ | 説明 |
|---|---|
| savepoint_name | セーブポイントの名前を指定します。 |
例
サンプルテーブル employee を作成します。
obclient> CREATE TABLE employee (id INT, name VARCHAR(10), salary INT);
obclient> INSERT INTO employee VALUES (1, 'Alice', 1000), (2, 'Bob', 2000), (3, 'Alice', 3000);
obclient> SELECT * FROM employee;
+------+-------+--------+
| ID | NAME | SALARY |
+------+-------+--------+
| 1 | Alice | 1000 |
| 2 | Bob | 2000 |
| 3 | Alice | 3000 |
+------+-------+--------+
3 rows in set
テーブル
employeeを更新し、id = 3のnameを 'Carol' に変更し、point_after_updateを作成します。obclient> UPDATE employee SET name = 'Carol' WHERE id = 3; obclient> SAVEPOINT point_after_update;テーブル
employeeに1行のデータを挿入し、テーブルをクエリします。obclient> INSERT INTO employee VALUES (4, 'David', 4000); obclient> SELECT * FROM employee;Query OK, 1 row affected +------+-------+--------+ | ID | NAME | SALARY | +------+-------+--------+ | 1 | Alice | 1000 | | 2 | Bob | 2000 | | 3 | Carol | 3000 | | 4 | David | 4000 | +------+-------+--------+ 4 rows in setpoint_after_updateまでロールバックし、テーブルをクエリします。obclient> ROLLBACK TO SAVEPOINT point_after_update; obclient> SELECT * FROM employee;Query OK, 0 rows affected +------+-------+--------+ | ID | NAME | SALARY | +------+-------+--------+ | 1 | Alice | 1000 | | 2 | Bob | 2000 | | 3 | Carol | 3000 | +------+-------+--------+ 3 rows in setobclient> COMMIT;