SAVEPOINTidentifierROLLBACK [WORK] TO [SAVEPOINT]identifierRELEASE SAVEPOINTidentifier
InnoDB supports the SQL statements
SAVEPOINT and ROLLBACK TO
SAVEPOINT. Starting from MySQL 5.0.3, RELEASE
SAVEPOINT and the optional WORK
keyword for ROLLBACK are supported as well.
The SAVEPOINT statement sets a named
transaction savepoint with a name of
identifier. If the current transaction
has a savepoint with the same name, the old savepoint is deleted
and a new one is set.
The ROLLBACK TO SAVEPOINT statement rolls back
a transaction to the named savepoint. (The
SAVEPOINT keyword is optional as of MySQL
5.0.3.) Modifications that the current transaction made to rows
after the savepoint was set are undone in the rollback, but
InnoDB does not release
the row locks that were stored in memory after the savepoint.
(Note that for a new inserted row, the lock information is carried
by the transaction ID stored in the row; the lock is not
separately stored in memory. In this case, the row lock is
released in the undo.) Savepoints that were set at a later time
than the named savepoint are deleted.
If the ROLLBACK TO SAVEPOINT statement returns
the following error, it means that no savepoint with the specified
name exists:
ERROR 1181: Got error 153 during ROLLBACK
The RELEASE SAVEPOINT statement removes the
named savepoint from the set of savepoints of the current
transaction. No commit or rollback occurs. It is an error if the
savepoint does not exist.
All savepoints of the current transaction are deleted if you
execute a COMMIT, or a
ROLLBACK that does not name a savepoint.
Beginning with MySQL 5.0.17, a new savepoint level is created when a stored function is invoked or a trigger is activated. The savepoints on previous levels become unavailable and thus do not conflict with savepoints on the new level. When the function or trigger terminates, any savepoints it created are released and the previous savepoint level is restored.

User Comments
Savepoints apply only to an already started transaction. They do not start a transaction themselves. So if you're getting 'SAVEPOINT foobar does not exist' errors, make sure you've actually started a transaction _and_ made the savepoint.
Add your own comment.