En este tema, aprenderemos sobre las instrucciones de control de transacciones en SQL. Las transacciones son fundamentales para garantizar la integridad y consistencia de los datos en una base de datos. Las instrucciones de control de transacciones permiten gestionar el inicio, la confirmación y la reversión de transacciones.

Conceptos Clave

  1. Transacción: Una transacción es una unidad de trabajo que se ejecuta de manera completa o no se ejecuta en absoluto. Asegura que las operaciones de la base de datos sean atómicas, consistentes, aisladas y duraderas (propiedades ACID).
  2. BEGIN TRANSACTION: Marca el inicio de una transacción.
  3. COMMIT: Confirma todas las operaciones realizadas durante la transacción.
  4. ROLLBACK: Revierte todas las operaciones realizadas durante la transacción.

Instrucciones de Control de Transacciones

BEGIN TRANSACTION

La instrucción BEGIN TRANSACTION se utiliza para iniciar una nueva transacción. Todas las operaciones realizadas después de esta instrucción se consideran parte de la transacción hasta que se ejecute un COMMIT o ROLLBACK.

BEGIN TRANSACTION;

COMMIT

La instrucción COMMIT se utiliza para confirmar todas las operaciones realizadas durante la transacción. Una vez que se ejecuta COMMIT, los cambios se guardan permanentemente en la base de datos.

COMMIT;

ROLLBACK

La instrucción ROLLBACK se utiliza para deshacer todas las operaciones realizadas durante la transacción. Esto revierte la base de datos al estado en que se encontraba antes de que comenzara la transacción.

ROLLBACK;

Ejemplo Práctico

Veamos un ejemplo práctico que ilustra cómo usar estas instrucciones de control de transacciones.

Escenario

Supongamos que tenemos una tabla cuentas con las siguientes columnas: id, nombre, y saldo. Queremos transferir dinero de una cuenta a otra de manera segura.

Tabla cuentas

id nombre saldo
1 Alice 1000
2 Bob 500

Código SQL

-- Iniciar la transacción
BEGIN TRANSACTION;

-- Restar 200 del saldo de Alice
UPDATE cuentas
SET saldo = saldo - 200
WHERE nombre = 'Alice';

-- Sumar 200 al saldo de Bob
UPDATE cuentas
SET saldo = saldo + 200
WHERE nombre = 'Bob';

-- Confirmar la transacción
COMMIT;

Explicación

  1. BEGIN TRANSACTION: Inicia la transacción.
  2. UPDATE cuentas SET saldo = saldo - 200 WHERE nombre = 'Alice': Resta 200 del saldo de Alice.
  3. UPDATE cuentas SET saldo = saldo + 200 WHERE nombre = 'Bob': Suma 200 al saldo de Bob.
  4. COMMIT: Confirma la transacción, haciendo permanentes los cambios.

Manejo de Errores

Es importante manejar errores para asegurar que la base de datos no quede en un estado inconsistente. Si ocurre un error durante la transacción, debemos usar ROLLBACK para revertir los cambios.

BEGIN TRANSACTION;

BEGIN TRY
    -- Restar 200 del saldo de Alice
    UPDATE cuentas
    SET saldo = saldo - 200
    WHERE nombre = 'Alice';

    -- Sumar 200 al saldo de Bob
    UPDATE cuentas
    SET saldo = saldo + 200
    WHERE nombre = 'Bob';

    -- Confirmar la transacción
    COMMIT;
END TRY
BEGIN CATCH
    -- Revertir la transacción en caso de error
    ROLLBACK;
    PRINT 'Error en la transacción. Se ha revertido.';
END CATCH;

Explicación

  1. BEGIN TRY: Inicia un bloque de código que intenta ejecutar las operaciones.
  2. BEGIN CATCH: Captura cualquier error que ocurra durante la ejecución del bloque TRY.
  3. ROLLBACK: Revertir la transacción si ocurre un error.
  4. PRINT 'Error en la transacción. Se ha revertido.': Mensaje de error para el usuario.

Ejercicio Práctico

Ejercicio

  1. Crea una tabla llamada productos con las siguientes columnas: id, nombre, cantidad.
  2. Inserta dos registros en la tabla productos.
  3. Escribe una transacción que:
    • Reste 10 de la cantidad del primer producto.
    • Sume 10 a la cantidad del segundo producto.
    • Confirme la transacción.

Solución

-- Crear la tabla productos
CREATE TABLE productos (
    id INT PRIMARY KEY,
    nombre VARCHAR(50),
    cantidad INT
);

-- Insertar registros en la tabla productos
INSERT INTO productos (id, nombre, cantidad) VALUES (1, 'Producto A', 100);
INSERT INTO productos (id, nombre, cantidad) VALUES (2, 'Producto B', 50);

-- Iniciar la transacción
BEGIN TRANSACTION;

-- Restar 10 de la cantidad del primer producto
UPDATE productos
SET cantidad = cantidad - 10
WHERE id = 1;

-- Sumar 10 a la cantidad del segundo producto
UPDATE productos
SET cantidad = cantidad + 10
WHERE id = 2;

-- Confirmar la transacción
COMMIT;

Conclusión

En esta sección, hemos aprendido sobre las instrucciones de control de transacciones en SQL, incluyendo BEGIN TRANSACTION, COMMIT y ROLLBACK. Estas instrucciones son esenciales para garantizar la integridad y consistencia de los datos en una base de datos. También hemos visto cómo manejar errores durante una transacción para evitar estados inconsistentes en la base de datos. Con estos conocimientos, estás preparado para gestionar transacciones de manera efectiva en tus aplicaciones SQL.

Curso de SQL

Módulo 1: Introducción a SQL

Módulo 2: Consultas básicas de SQL

Módulo 3: Trabajando con múltiples tablas

Módulo 4: Filtrado avanzado de datos

Módulo 5: Manipulación de datos

Módulo 6: Funciones avanzadas de SQL

Módulo 7: Subconsultas y consultas anidadas

Módulo 8: Índices y optimización de rendimiento

Módulo 9: Transacciones y concurrencia

Módulo 10: Temas avanzados

Módulo 11: SQL en la práctica

Módulo 12: Proyecto final

© Copyright 2024. Todos los derechos reservados