SQLite – Transacciones

Una transacción es una unidad de trabajo que se realiza en una base de datos. Las transacciones son unidades o secuencias de trabajo realizadas en un orden lógico, ya sea manualmente por el usuario o automáticamente por algún programa de base de datos.

Una transacción es la propagación de uno o más cambios en una base de datos. Por ejemplo, si crea, actualiza o elimina un registro de una tabla, entonces está realizando una transacción en la tabla. Es importante monitorear las transacciones para garantizar la integridad de los datos y manejar los errores de la base de datos.

De hecho, agrupará muchas consultas SQLite en un grupo y las ejecutará todas juntas como parte de una transacción.

Propiedades de la transacción

Las transacciones tienen las siguientes cuatro propiedades estándar, comúnmente denominadas ACID.

  • Atomicidad – Asegura la finalización exitosa de todas las operaciones dentro del bloque de trabajo; de lo contrario, la transacción se aborta en el punto de falla y las operaciones anteriores se revierten a su estado original.

  • Secuencia – Asegura que la base de datos cambie de estado correctamente después de una transacción confirmada con éxito.

  • Aislamiento – Permite que las transacciones funcionen de forma independiente y transparente entre sí.

  • Durabilidad – Asegura que el resultado o efecto de una transacción comprometida persista en caso de falla del sistema.

Control de transacciones

A continuación se muestran los siguientes comandos que se utilizan para administrar transacciones:

  • EMPEZAR UNA OFERTA – Empiece un trato.

  • COMPLETO – Para guardar sus cambios, puede utilizar alternativamente FIN DE LA TRANSACCIÓN mando.

  • RETROCEDER – Cancelar cambios.

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

Comando INICIAR TRANSACCIÓN

Las transacciones se pueden iniciar con BEGIN TRANSACTION o simplemente con el comando BEGIN. Estas transacciones generalmente persisten hasta que se encuentra el siguiente COMMIT o ROLLBACK. Sin embargo, la transacción también se revertirá si se cierra la base de datos o se produce un error. A continuación se muestra la sintaxis simple para iniciar una transacción.

BEGIN;
or 
BEGIN TRANSACTION;

Comando COMMIT

El comando COMMIT es un comando transaccional que se usa para guardar los cambios causados ​​por una transacción en la base de datos.

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

A continuación se muestra la sintaxis del comando COMMIT.

COMMIT;
or
END TRANSACTION;

Comando ROLLBACK

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

ROLLBACK solo se puede utilizar para deshacer transacciones desde el último COMMIT o ROLLBACK.

A continuación se muestra la sintaxis del comando ROLLBACK.

ROLLBACK;

Ejemplo

Considere la tabla EMPRESA con las siguientes entradas.

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 de la tabla que tienen edad = 25. Luego use el comando ROLLBACK para deshacer todos los cambios.

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

Ahora, si marca la tabla EMPRESA, todavía tiene las siguientes entradas:

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

Comencemos otra transacción y eliminemos los registros de la tabla que tienen edad = 25, y finalmente usamos el comando COMMIT para confirmar todos los cambios.

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

Si ahora comprueba que todavía existen las siguientes entradas en la tabla EMPRESA:

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

🚫