-- 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;
Concepto de Transacciones:
Comandos BEGIN, COMMIT y ROLLBACK:
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;
confirma todas las operaciones realizadas durante la transacción. Los cambios se guardan permanentemente en la base de datos.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.Ejemplo de Manejo de Transacciones:
BEGIN;
.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.BEGIN;
.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.