SAVEPOINT (SQL)

SAVEPOINTは、サブトランザクション（入れ子トランザクションとも呼ばれる）を実現するための、データベース言語SQLのステートメントの1つである。トランザクション内の特定の地点に名前を付け、その地点以前に行った処理に影響を及ぼすことなく、その地点以降に行った処理をロールバックできる。1つのトランザクション内で複数の SAVEPOINT を作成することもできる。
SAVEPOINTはデータベースを利用するアプリケーションで、複雑なエラー復帰処理を実現するのに有効である。複数のステートメントから成るトランザクションの途中でエラーが発生した場合、SAVEPOINTを利用すると、トランザクション全体をロールバックすることなく、エラーから復帰することができる。
SAVEPOINT の使用例を以下に示す。codice_1 で地点に名前を付け、
codice_2 でロールバックする。設定した SAVEPOINT は codice_3 またはトランザクションの終了時に解放される。
BEGIN;
 INSERT INTO tbl VALUES (1);
SAVEPOINT savepoint_example;
 INSERT INTO tbl VALUES (2);
ROLLBACK TO SAVEPOINT savepoint_example;
 INSERT INTO tbl VALUES (3);
COMMIT;
-- 1 と 3 が挿入された状態になる。
SAVEPOINT は標準SQLにも採用されており、PostgreSQL, Oracle Database, Microsoft SQL Server(SAVE TRAN[SACTION] "name"の書式), MySQL, DB2, SQLite (3.6.8 以降), Firebird, Informix Dynamic Server (11.50xC3 以降) など、多くの関係データベース管理システムがサポートしている。