SQLite Transacción

Una transacción es una unidad de trabajo que se ejecuta en la base de datos. Una transacción es una unidad o secuencia de trabajo completada en un orden lógico, que puede ser realizada manualmente por el usuario o automáticamente por algún programa de base de datos.

Una transacción se refiere a una extensión de uno o más cambios en la base de datos. Por ejemplo, si está creando un registro, actualizando un registro o eliminando un registro de una tabla, entonces está ejecutando una transacción en esa tabla. Es importante controlar las transacciones para garantizar la integridad de los datos y manejar los errores de la base de datos.

De hecho, puede agrupar muchas consultas SQLite y ejecutarlas todas juntas como parte de una transacción.

Propiedades de las transacciones

Una transacción tiene las siguientes cuatro propiedades estándar, generalmente abreviadas como ACID:

  • Atomicidad:Asegura que todas las operaciones dentro de la unidad de trabajo se completen con éxito; de lo contrario, la transacción termina en caso de fallo y las operaciones anteriores se revierten a su estado previo.

  • Consistencia:Asegura que la base de datos cambie de estado correctamente en una transacción confirmada con éxito.

  • Aislamiento:Hace que las operaciones de transacción sean independientes y transparentes entre sí.

  • Persistencia:Asegura que los resultados o efectos de una transacción confirmada persistan incluso en caso de fallo del sistema.

Control de transacciones

Use los siguientes comandos para controlar las transacciones:

  • BEGIN TRANSACTION: Iniciar el procesamiento de la transacción.

  • COMMIT: Guardar los cambios, o se puede usarEND TRANSACTIONel comando.

  • ROLLBACK: Revertir los cambios realizados.

Los comandos de control de transacciones solo se usan con los comandos DML INSERT, UPDATE y DELETE. No se pueden usar al crear o eliminar tablas, ya que estas operaciones se confirman automáticamente en la base de datos.

Comando BEGIN TRANSACTION

Una transacción se puede iniciar con el comando BEGIN TRANSACTION o simplemente con el comando BEGIN. Normalmente, dicha transacción continúa ejecutándose hasta que se encuentra el siguiente comando COMMIT o ROLLBACK. Sin embargo, la transacción también se revierte cuando se cierra la base de datos o se produce un error. La siguiente es la sintaxis simple para iniciar una transacción:

BEGIN;

or 

BEGIN TRANSACTION;

Comando COMMIT

El comando COMMIT es un comando de transacción que se utiliza para guardar los cambios realizados por la transacción en la base de datos.

El comando COMMIT guarda en la base de datos todas las transacciones desde el último comando COMMIT o ROLLBACK.

La sintaxis del comando COMMIT es la siguiente:

COMMIT;

or

END TRANSACTION;

Comando ROLLBACK

El comando ROLLBACK es un comando de transacción que se utiliza para deshacer transacciones que aún no se han guardado en la base de datos.

El comando ROLLBACK solo se puede usar para deshacer transacciones desde el último comando COMMIT o ROLLBACK emitido.

La sintaxis del comando ROLLBACK es la siguiente:

ROLLBACK;

Ejemplo

Supongamos que la tabla COMPANY tiene los siguientes registros:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Ahora, comencemos una transacción y eliminemos los registros con age = 25 de la tabla. Finalmente, usamos el comando ROLLBACK para deshacer todos los cambios.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

Verificamos la tabla COMPANY y todavía tiene los siguientes registros:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Ahora, comencemos otra transacción, eliminemos los registros con age = 25 de la tabla y, finalmente, usemos el comando COMMIT para confirmar todos los cambios.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

Verificamos la tabla COMPANY y tiene los siguientes registros:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
Otras extensiones