0% found this document useful (0 votes)
8 views3 pages

TRIGGERS

The document shows how to create triggers in MySQL to validate and normalize data on insert and update of a table, log changes to an email address, and log deleted records. Triggers are created to check and limit student grade values, generate an email address if missing, log email changes, and log deleted student records.

Uploaded by

pharellbloom
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views3 pages

TRIGGERS

The document shows how to create triggers in MySQL to validate and normalize data on insert and update of a table, log changes to an email address, and log deleted records. Triggers are created to check and limit student grade values, generate an email address if missing, log email changes, and log deleted student records.

Uploaded by

pharellbloom
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

1--

CREATE TABLE alumnos (


id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
apellido1 VARCHAR(50) NOT NULL,
apellido2 VARCHAR(50),
nota FLOAT
);

-- Paso 3
DELIMITER $$
DROP TRIGGER IF EXISTS trigger_check_nota_before_insert$$
CREATE TRIGGER trigger_check_nota_before_insert
BEFORE INSERT
ON alumnos FOR EACH ROW
BEGIN
IF NEW.nota < 0 THEN
set NEW.nota = 0;
ELSEIF NEW.nota > 10 THEN
set NEW.nota = 10;
END IF;
END
DELIMITER $$
DROP TRIGGER IF EXISTS trigger_check_nota_before_update$$
CREATE TRIGGER trigger_check_nota_before_update
BEFORE UPDATE
ON alumnos FOR EACH ROW
BEGIN
IF NEW.nota < 0 THEN
set NEW.nota = 0;
ELSEIF NEW.nota > 10 THEN
set NEW.nota = 10;
END IF;
END

-- Paso 4
DELIMITER ;
INSERT INTO alumnos VALUES (1, 'Pepe', 'López', 'López', -1);
INSERT INTO alumnos VALUES (2, 'María', 'Sánchez', 'Sánchez', 11);
INSERT INTO alumnos VALUES (3, 'Juan', 'Pérez', 'Pérez', 8.5);

-- Paso 5
SELECT * FROM alumnos;

-- Paso 6
UPDATE alumnos SET nota = -4 WHERE id = 3;
UPDATE alumnos SET nota = 14 WHERE id = 3;
UPDATE alumnos SET nota = 9.5 WHERE id = 3;

-- Paso 7
SELECT * FROM alumnos;
2--
CREATE DATABASE test;
USE test;

CREATE TABLE alumnos(


INT id AUTO_iNCREMENT PRIMARY KEY,
nombre VARCHAR(255),
apellido1 VARCHAR(255),
apellido2 VARCHAR(255),
email VARCHAR(255)
);

DELIMITER $$

CREATE PROCEDURE crear_email(


IN p_nombre VARCHAR(255),
IN p_apellido1 VARCHAR(255),
IN p_apellido2 VARCHAR(255),
IN p_dominio VARCHAR(255),
OUT p_email VARCHAR(255)
)
BEGIN
SET p_email = CONCAT(
LEFT(p_nombre, 2),
LEFT(p_apellido1, 4),
LEFT(p_apellido2, 3),
'@',
p_dominio
);
$$

DELIMITER $$
CREATE TRIGGER trigger_crear_email_before_insert
BEFORE INSERT
ON alumnos FOR EACH ROW
BEGIN
DECLARE nuevo_email VARChAR(255);
IF NEW.email is NULL THEN
CALL crear_email(NEW.nombre, NEW.apellido1, NEW.apellido2, 'midominio.com')
INTO nuevo_email;
SET NEW.email = nuevo_email;
END IF;
$$

3--
DELIMITER $$
CREATE TRIGGER trigger_guardar_email_after_update
AFTER UPDATE ON alumnos
FOR EACH ROW
BEGIN
IF OLD.email != NEW.email THEN
INSERT INTO log_cambios_email (id_alumno, fecha_hora, old_email, new_email)
VALUES (id_alumno, NOW(), OLD.email, NEW.email);
END IF;
$$

CREATE TABLE log_cambios_email (


id INT AUTO_INCREMENT PRIMARY KEY,
id_alumno INT,
fecha_hora DATETIME,
old_email VARCHAR(255),
new_email VARCHAR(255)
);

4--
DELIMITER $$

CREATE TRIGGER trigger_guardar_alumnos_eliminados


AFTER DELETE ON alumnos
FOR EACH ROW
BEGIN
INSERT INTO log_alumnos_eliminados (id_alumno, fecha_hora, nombre, apellido1,
apellido2, email)
VALUES (id_alumno, NOW(), OLD.nombre, OLD.apellido1, OLD.apellido2, OLD.email);
END;
$$

CALL crear_email('Pharell', 'OLOUMOU', 'Bloom', 'midominio.com', @email);


SELECT @email;
INSERT INTO alumnos (nombre, apellido1, apellido2, email) VALUES ('Pharell',
'Oloumou', 'Bloom', bll@midominio);
SELECT * FROm alumnos;

INSERT INTO log_cambios_email (id_alumno, fecha_hora, old_email, new_email)


VALUES
(1, NOW(), '[email protected]', '[email protected]'),
(2, NOW(), '[email protected]', '[email protected]'),
(3, NOW(), '[email protected]', '[email protected]');

You might also like