2011-09-02 15 views

Respuesta

14

un punto de salvaguarda marca un punto en que la transacción actual se puede volver a utilizar. En lugar de retrotraer todos sus cambios, puede optar por retrotraer solo algunos de ellos. Por ejemplo, supongamos que:

  • iniciar una transacción,
  • inserto 10 filas en una tabla,
  • establecer un punto de salvaguarda,
  • insertar otros 5 filas,
  • reversión al punto de rescate,
  • comprometer la transacción.

Después de hacer esto, la tabla contendrá las primeras 10 filas que ha insertado. Las otras 5 filas habrán sido eliminadas por la reversión.

El establecimiento de un punto de seguridad no 'guarda' ningún dato en la base de datos. No hace que los cambios en la base de datos sean visibles para ninguna otra transacción. Un punto de rescate es solo un marcador al que la transacción actual puede retroceder.

3
+0

Esto está mal. Como se indica en [http://docs.oracle.com/](http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#set_roll_back_savepoints) 'El método Connection.setSavepoint, establece un Savepoint objeto dentro de la transacción actual. El método Connection.rollback está sobrecargado para tomar un argumento de Savepoint. –

+3

@ ValentinoDell'Aica: entonces, ¿qué hay de malo en mi afirmación? Los puntos de guardado ** son ** una característica de DBMS. La API de JDBC simplemente le da acceso a esa función. Si el DBMS no los admite, no hay forma de que pueda usarlos desde dentro de JDBC. –