MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント

13.3.4 SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント

SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier

InnoDB は、SQL ステートメント SAVEPOINTROLLBACK TO SAVEPOINTRELEASE SAVEPOINT のほか、ROLLBACK のオプションの WORK キーワードをサポートしています。

SAVEPOINT ステートメントは、identifier の名前を持つ名前付きのトランザクションセーブポイントを設定します。 現在のトランザクションに同じ名前を持つセーブポイントが含まれている場合、古いセーブポイントは削除され、新しいセーブポイントが設定されます。

ROLLBACK TO SAVEPOINT ステートメントは、トランザクションを終了することなく、そのトランザクションを指定されたセーブポイントにロールバックします。 セーブポイントが設定されたあとに現在のトランザクションが行に対して行なった変更はロールバックで元に戻されますが、InnoDB は、セーブポイントのあとにメモリーに格納された行ロックを解放しません。 (新しく挿入された行の場合、ロック情報は、その行に格納されているトランザクション ID によって伝達されます。ロックが個別にメモリーに格納されるわけではありません。 この場合、行ロックは Undo で解放されます。) 指定されたセーブポイントよりあとで設定されたセーブポイントは削除されます。

ROLLBACK TO SAVEPOINT ステートメントが次のエラーを返した場合は、指定された名前を持つセーブポイントが存在しないことを示しています。

ERROR 1305 (42000): SAVEPOINT identifier does not exist

RELEASE SAVEPOINT ステートメントは、指定されたセーブポイントを現在のトランザクションの一連のセーブポイントから削除します。 コミットまたはロールバックは発生しません。 そのセーブポイントが存在しない場合はエラーになります。

COMMIT、またはセーブポイントを指定しない ROLLBACK を実行した場合は、現在のトランザクションのすべてのセーブポイントが削除されます。

ストアドファンクションが呼び出されるか、またはトリガーがアクティブ化されると、新しいセーブポイントレベルが作成されます。 以前のレベルにあるセーブポイントは使用できなくなるため、新しいレベルのセーブポイントとは競合しません。 関数またはトリガーが終了すると、その関数またはトリガーによって作成されたセーブポイントはすべて解放され、以前のセーブポイントレベルがリストアされます。


関連キーワード:  ステートメント, CREATE, TABLE, SAVEPOINT, セーブポイント, DROP, トランザクション, サブクエリー, 関数, FUNCTION