-- 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),
Email VARCHAR(100),
Edad INT
);
-- 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, Email, Edad)
VALUES
(1, 'Juan', 'juan@example.com', 30),
(2, 'Ana', 'ana@example.com', 25),
(3, 'Pedro', 'pedro@example.com', 20);
-- Insertar datos en la tabla Pedidos
INSERT INTO Pedidos (PedidoID, ClienteID, Fecha, Monto)
VALUES
(1, 1, '2023-01-15', 100.00),
(2, 2, '2023-01-16', 150.00),
(3, 1, '2023-01-17', 200.00),
(4, 3, '2023-01-18', 250.00),
(5, 2, '2023-01-19', 300.00);
-- Creación de un procedimiento almacenado
DELIMITER //
CREATE PROCEDURE ObtenerPedidosPorCliente(IN cliente_id INT)
BEGIN
SELECT * FROM Pedidos WHERE ClienteID = cliente_id;
END //
DELIMITER ;
-- Llamar al procedimiento almacenado
CALL ObtenerPedidosPorCliente(1);
-- Creación de una función definida por el usuario
DELIMITER //
CREATE FUNCTION CalcularDescuento(monto DECIMAL(10, 2)) RETURNS DECIMAL(10, 2)
BEGIN
DECLARE descuento DECIMAL(10, 2);
SET descuento = monto * 0.1; -- 10% de descuento
RETURN descuento;
END //
DELIMITER ;
-- Usar la función definida por el usuario
SELECT PedidoID, Monto, CalcularDescuento(Monto) AS Descuento FROM Pedidos;
-- Creación de un trigger
DELIMITER //
CREATE TRIGGER ActualizarEdadAntesDeInsertar
BEFORE INSERT ON Clientes
FOR EACH ROW
BEGIN
IF NEW.Edad < 18 THEN
SET NEW.Edad = 18; -- Establecer la edad mínima a 18
END IF;
END //
DELIMITER ;
-- Probar el trigger insertando un nuevo cliente con edad menor a 18
INSERT INTO Clientes (ClienteID, Nombre, Email, Edad)
VALUES (4, 'Laura', 'laura@example.com', 16);
-- Verificar el resultado del trigger
SELECT * FROM Clientes;
Creación de Procedimientos Almacenados:
CREATE PROCEDURE ObtenerPedidosPorCliente(IN cliente_id INT) ...
: Este comando crea un procedimiento almacenado llamado ObtenerPedidosPorCliente
, que toma un parámetro de entrada cliente_id
y selecciona todos los pedidos del cliente especificado.CALL ObtenerPedidosPorCliente(1);
: Este comando llama al procedimiento almacenado ObtenerPedidosPorCliente
con el parámetro cliente_id
igual a 1, obteniendo todos los pedidos realizados por el cliente con ID 1.Creación de Funciones Definidas por el Usuario:
CREATE FUNCTION CalcularDescuento(monto DECIMAL(10, 2)) RETURNS DECIMAL(10, 2) ...
: Este comando crea una función definida por el usuario llamada CalcularDescuento
, que toma un parámetro monto
y devuelve el 10% de ese monto como descuento.SELECT PedidoID, Monto, CalcularDescuento(Monto) AS Descuento FROM Pedidos;
: Este comando usa la función CalcularDescuento
para calcular el descuento de cada pedido y selecciona el ID del pedido, el monto original y el descuento calculado.Creación de Triggers:
CREATE TRIGGER ActualizarEdadAntesDeInsertar BEFORE INSERT ON Clientes ...
: Este comando crea un trigger llamado ActualizarEdadAntesDeInsertar
, que se ejecuta antes de insertar un registro en la tabla Clientes
. Si la edad del nuevo cliente es menor de 18, el trigger establece la edad a 18.INSERT INTO Clientes (ClienteID, Nombre, Email, Edad) VALUES (4, 'Laura', 'laura@example.com', 16);
: Este comando inserta un nuevo cliente con edad 16. El trigger ajusta la edad a 18 antes de la inserción.SELECT * FROM Clientes;
: Este comando verifica que la edad del nuevo cliente se ha ajustado a 18.Estos conceptos avanzados permiten automatizar tareas, realizar cálculos personalizados y garantizar la integridad de los datos a través de procedimientos almacenados, funciones y triggers.