SQL-92/99 Oracle Db2 SQL Server MySQL PostgreSQL Access
Oracle/ MySQL/
SAVEPOINT セーブポイント名
Db2/
SAVEPOINT セーブポイント名 ON ROLLBACK RETAIN CURSORS
SAVEPOINTはトランザクション処理中のロールバックポイントを作成するときに使用します。
Oracle, MySQLでは複数のセーブポイントを作成できますが、Db2では複数のセーブポイントを作成することはできません。
関連キーワード
SQL実行例の説明(1)
・T1_SAMPLE表のIDが100102に一致するデータのL_NAMEを山田に更新するトランザクション処理を開始します。
・次に、SAVEPOINTを使用してロールバックポイントを作成します。
・その後、T1_SAMPLE表にデータを挿入するトランザクション処理を開始します。
UPDATE T1_SAMPLE SET L_NAME = '山田' WHERE ID = '100102';
-- Oracle/ MySQL/
SAVEPOINT SP_UPD1;
-- Db2/
SAVEPOINT SP_UPD1 ON ROLLBACK RETAIN CURSORS;
INSERT INTO T1_SAMPLE VALUES ('200101', '小林', '健二', '1');
SQL実行の結果(1-1)
T1_SAMPLE表には5件のデータが格納されています。(左)
データを更新したトランザクション処理後のセーブポイント(SP_UPD1)へロールバックしてからトランザクション処理を確定します。(右)
このときデータを挿入したトランザクション処理はロールバック(トランザクション処理が取り消し)されているためT1_SAMPLE表には存在しません。
ROLLBACK TO SAVEPOINT SP_UPD1;
COMMIT;
SELECT * FROM T1_SAMPLE;
ID | L_NAME | F_NAME | SEX |
---|---|---|---|
100101 | 山田 | 晴男 | 1 |
100102 | 佐藤 | 愛 | 2 |
100103 | 鈴木 | 二郎 | 1 |
100104 | 田中 | 栄吉 | 1 |
100105 | 木村 | 匠 | 1 |
ID | L_NAME | F_NAME | SEX |
---|---|---|---|
100101 | 山田 | 晴男 | 1 |
100102 | 山田 | 愛 | 2 |
100103 | 鈴木 | 二郎 | 1 |
100104 | 田中 | 栄吉 | 1 |
100105 | 木村 | 匠 | 1 |