Manejo de Transacciones

Código de ejemplo

				
					-- Crear una base de datos y tablas para los ejemplos
CREATE DATABASE Tienda;

-- Tabla Clientes
CREATE TABLE Clientes (
    ClienteID INT PRIMARY KEY,
    Nombre VARCHAR(50)
);

-- Tabla Pedidos
CREATE TABLE Pedidos (
    PedidoID INT PRIMARY KEY,
    ClienteID INT,
    Fecha DATE,
    Monto DECIMAL(10, 2),
    FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID)
);

-- Insertar datos en la tabla Clientes
INSERT INTO Clientes (ClienteID, Nombre)
VALUES
(1, 'Juan'),
(2, 'Ana'),
(3, 'Pedro');

-- Manejo de Transacciones
-- Iniciar una transacción
BEGIN;

-- Intentar insertar un pedido
INSERT INTO Pedidos (PedidoID, ClienteID, Fecha, Monto)
VALUES (1, 1, '2023-01-15', 100.00);

-- Intentar insertar otro pedido con un cliente inexistente
INSERT INTO Pedidos (PedidoID, ClienteID, Fecha, Monto)
VALUES (2, 99, '2023-01-16', 150.00);

-- Confirmar la transacción
COMMIT;

-- Manejo de Transacciones con ROLLBACK
-- Iniciar una transacción
BEGIN;

-- Intentar insertar un pedido
INSERT INTO Pedidos (PedidoID, ClienteID, Fecha, Monto)
VALUES (3, 2, '2023-01-17', 200.00);

-- Intentar insertar otro pedido con un cliente inexistente
INSERT INTO Pedidos (PedidoID, ClienteID, Fecha, Monto)
VALUES (4, 99, '2023-01-18', 250.00);

-- Revertir la transacción
ROLLBACK;

				
			

Explicación

  1. Concepto de Transacciones:

    • Una transacción es una secuencia de operaciones que se ejecutan como una unidad lógica. Las transacciones aseguran que todas las operaciones dentro de la transacción se completen exitosamente o ninguna de ellas se aplique. Esto garantiza la consistencia y la integridad de los datos.
  2. Comandos BEGIN, COMMIT y ROLLBACK:

    • BEGIN: BEGIN; inicia una nueva transacción. Todas las operaciones SQL siguientes se considerarán parte de esta transacción hasta que se ejecute un comando COMMIT o ROLLBACK.
    • COMMIT: COMMIT; confirma todas las operaciones realizadas durante la transacción. Los cambios se guardan permanentemente en la base de datos.
    • ROLLBACK: ROLLBACK; revierte todas las operaciones realizadas durante la transacción. Los cambios se deshacen y la base de datos vuelve al estado en que se encontraba al inicio de la transacción.
  3. Ejemplo de Manejo de Transacciones:

    • En el primer bloque de transacciones:
      • La transacción se inicia con BEGIN;.
      • Se intenta insertar dos pedidos en la tabla Pedidos. El segundo pedido tiene un ClienteID inexistente.
      • COMMIT; intenta confirmar la transacción, pero debido a la integridad referencial, la transacción fallará y no se aplicarán los cambios.
    • En el segundo bloque de transacciones:
      • La transacción se inicia con BEGIN;.
      • Se intenta insertar dos pedidos en la tabla Pedidos. El segundo pedido tiene un ClienteID inexistente.
      • ROLLBACK; revierte la transacción debido a la inconsistencia, asegurando que ninguno de los cambios se aplique.