title: Savepoint
text: # Savepoint
  
  Un punto de recuperación, del inglés savepoint, es una forma de implementar subtransacciones (también conocidas como transacciones anidadas) dentro de un sistema gestor de base de datos relacional indicando un punto dentro de una transacción de base de datos que puede ser restaurada sin afectar a cualquier trabajo realizado en la transacción antes de que el punto de recuperación fuera creado. Pueden existir varios puntos de recuperación dentro de una transacción individual. Los puntos de recuperación son útiles para implementar la recuperación ante errores complejos en aplicaciones de base de datos. Si ocurre un error en medio de una transacción compuesta por múltiples sentencias, la aplicación puede ser capaz de recuperarse del error revirtiendo la transacción hasta un punto de recuperación anterior sin necesidad de abortar la transacción completa.
  Un punto de recuperación puede estar declarado emitiendo una sentencia SAVEPOINT name. Todos los cambios realizados después de que un punto de recuperación haya sido declarado pueden ser deshechos emitiendo una sentencia ROLLBACK TO SAVEPOINT name. Emitiendo RELEASE SAVEPOINT name causará que el punto de recuperación concreto sea descartado, pero no afectará a nada más. Emitiendo los comandos ROLLBACK o COMMIT también descartará cualesquiera puntos de recuperación creados desde el inicio de la transacción principal.
  Los puntos de recuperación son implementados de una u otra forma en sistemas de bases de datos tales como PostgreSQL, Oracle, Microsoft SQL Server, MySQL, DB2, y Firebird. Los puntos de recuperación están también definidos en el estándar SQL.