SAVEPOINTidentifierROLLBACK [WORK] TO SAVEPOINTidentifierRELEASE SAVEPOINTidentifier
        InnoDB は SQL ステートメント
        SAVEPOINT、ROLLBACK TO
        SAVEPOINT、RELEASE SAVEPOINT
        そして ROLLBACK の任意
        WORK
        キーワードをサポートします。
      
        SAVEPOINT ステートメントは
        identifier
        の名前を利用して、名前が付けられたトランザクション
        セーブポイントを設定します。もし現在のトランザクションが同名のセーブポイントを持っていれば、古いセーブポイントは削除され新しいものが設定されます。
      
        ROLLBACK TO SAVEPOINT
        ステートメントは、名づけられたセーブポイントにトランザクションをロールバックします。セーブポイントの設定後に行に対して現在のトランザクションが行った変更はロールバック内で解除されますが、InnoDB
        はセーブポイントの後にメモリに格納された新しい行ロックのリリースは
        行いません。(新しく挿入された行には、その行内に格納されているトランザクション
        ID
        によってロック情報が保持されるので、そのロックはメモリの中で別々に格納される訳ではないという事に注意してください。この場合、行ロックは取り消しの中でリリースされます。)名づけられたセーブポイントよりも後で設定されたセーブポイントは削除されます。
      
        もし ROLLBACK TO SAVEPOINT
        ステートメントが次のエラーを返したら、指定された名前のセーブポイントは存在しないという事を意味します。
      
ERROR 1181: Got error 153 during ROLLBACK
        RELEASE SAVEPOINT
        ステートメントは、現在のトランザクションのセーブポイント
        セットから、名づけられたセーブポイントを除外します。コミットもロールバックも起きません。もしセーブポイントが存在しなければ、これはエラーになります。
      
        もし COMMIT
        や、セーブポイントに名前をつけない
        ROLLBACK
        を実行すると、現在のトランザクションの全てのセーブポイントは削除されます。
      
MySQL 5.0.17 から、ストアド ファンクションが呼び出されたりトリガが作動した時に、新しいセーブポイント レベルが作成されます。以前のレベルのセーブポイントは無効になる為、新しいレベルとの間でセーブポイントの衝突が起きません。ファンクションやトリガが終了する時に、それらが作成したセーブポイントはリリースされ、以前のセーブポイント レベルが保持されます。
