コンテンツにスキップ

SAVEPOINT (SQL)

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Semi-Brace (会話 | 投稿記録) による 2020年10月2日 (金) 15:34個人設定で未設定ならUTC)時点の版 (bulk replace (ns=0, <source> → <syntaxhighlight>) via script)であり、現在の版とは大きく異なる場合があります。

SAVEPOINT は、サブトランザクション (入れ子トランザクションとも呼ばれる) を実現するための、データベース言語 SQL のステートメントの1つである。トランザクション内の特定の地点に名前を付け、その地点以前に行った処理に影響を及ぼすことなく、その地点以降に行った処理をロールバックできる。1つのトランザクション内で複数の SAVEPOINT を作成することもできる。

SAVEPOINT は データベースを利用するアプリケーションで、複雑なエラー復帰処理を実現するのに有効である。複数のステートメントから成るトランザクションの途中でエラーが発生した場合、SAVEPOINT を利用すると、トランザクション全体をロールバックすることなく、エラーから復帰することができる。

SAVEPOINT の使用例を以下に示す。SAVEPOINT name で地点に名前を付け、 ROLLBACK TO SAVEPOINT name でロールバックする。設定した SAVEPOINT は RELEASE SAVEPOINT name またはトランザクションの終了時に解放される。

<syntaxhighlight lang="sql"> 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 が挿入された状態になる。 </source>

SAVEPOINT は標準SQLにも採用されており、PostgreSQL, Oracle Database, Microsoft SQL Server(SAVE TRAN[SACTION] nameの書式), MySQL, DB2, SQLite (3.6.8 以降), Firebird, Informix Dynamic Server (11.50xC3 以降) など、多くの関係データベース管理システムがサポートしている。