Bases de datos de ejemplo[]
Creación[]
DROP DATABASE IF EXISTS videoteca;
CREATE DATABASE videoteca;
USE videoteca;
CREATE TABLE actor (
id INT NOT NULL
AUTO_INCREMENT,
nombre VARCHAR(64) NOT NULL,
apellidos VARCHAR(64) NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE actor_ext (
idactor INT NOT NULL,
imdb VARCHAR(32) NOT NULL,
carpeta VARCHAR(255) NOT NULL,
PRIMARY KEY(idactor),
INDEX ae_FK(idactor),
FOREIGN KEY(idactor)
REFERENCES actor(id)
) ENGINE = InnoDB;
Inserción[]
USE videoteca;
INSERT INTO actor(nombre, apellidos)
VALUES('Harrison', 'Ford');
INSERT INTO actor(nombre, apellidos)
VALUES('Russell', 'Crowe');
INSERT INTO actor_ext(idactor, imdb, carpeta)
VALUES(1, 'nm0000148', 'harrison_ford');
INSERT INTO actor_ext(idactor, imdb, carpeta)
VALUES(2, 'nm0000128', 'russell_crowe');
Ejemplos[]
Inserción[]
USE videoteca;
DELIMITER //
CREATE TRIGGER dc_actor_insertar
AFTER INSERT ON actor
FOR EACH ROW BEGIN
DECLARE nuevo_carpeta VARCHAR(255);
SET nuevo_carpeta = CONCAT(
LOWER(NEW.nombre),
'_',
LOWER(NEW.apellidos)
);
INSERT INTO actor_ext(idactor, imdb, carpeta)
VALUES(NEW.id, '', nuevo_carpeta);
END
//
DELIMITER ;
Pruebe a insertar un nuevo registro:
USE videoteca;
INSERT INTO actor(nombre, apellidos)
VALUES('Tim','Robins');
Actualización[]
Resolución del error:
USE videoteca;
UPDATE
actor
SET
apellidos = 'Robbins'
WHERE
id = 3;
USE videoteca;
UPDATE
actor_ext
SET
carpeta = 'tim_robbins'
WHERE
idactor = 3;
Desencadenador que actualiza ambas tablas:
USE videoteca;
DELIMITER //
CREATE TRIGGER dc_actor_actualizar
AFTER UPDATE ON actor
FOR EACH ROW BEGIN
DECLARE nuevo_carpeta VARCHAR(255);
SET nuevo_carpeta = CONCAT(
LOWER(NEW.nombre),
'_',
LOWER(NEW.apellidos)
);
UPDATE
actor_ext
SET
carpeta = nuevo_carpeta
WHERE
idactor = NEW.id;
END
//
DELIMITER ;
Borrado[]
Eliminación de un registro:
USE videoteca;
DELETE FROM actor WHERE id = 3;
Desencadenador de borrado:
USE videoteca;
DELIMITER //
CREATE TRIGGER dc_actor_eliminar
BEFORE DELETE ON actor
FOR EACH ROW BEGIN
DELETE FROM
actor_ext
WHERE
idactor = OLD.id;
END
//
DELIMITER ;