Introducció als Triggers

Els triggers (o desencadenadors) són procediments especials que s'executen automàticament en resposta a certs esdeveniments en una taula o vista d'una base de dades. Els triggers són útils per a la validació de dades, la integritat referencial, l'auditoria i la sincronització de dades entre taules.

Conceptes Clau

  • Esdeveniment: L'acció que activa el trigger, com ara una instrucció INSERT, UPDATE o DELETE.
  • Moment: Quan s'executa el trigger en relació amb l'esdeveniment, pot ser BEFORE (abans) o AFTER (després).
  • Acció: El codi SQL que s'executa quan el trigger és activat.

Tipus de Triggers

  1. BEFORE Triggers: S'executen abans que l'esdeveniment es completi.
  2. AFTER Triggers: S'executen després que l'esdeveniment es completi.
  3. INSTEAD OF Triggers: S'utilitzen principalment amb vistes per substituir l'acció de l'esdeveniment.

Crear un Trigger

Sintaxi Bàsica

CREATE TRIGGER nom_del_trigger
{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
ON nom_de_la_taula
[FOR EACH ROW]
BEGIN
    -- Codi SQL a executar
END;

Exemple Pràctic

Suposem que tenim una taula empleats i volem crear un trigger que actualitzi una taula auditoria cada vegada que es faci una inserció en la taula empleats.

Taula empleats

CREATE TABLE empleats (
    id INT PRIMARY KEY,
    nom VARCHAR(100),
    posicio VARCHAR(100),
    salari DECIMAL(10, 2)
);

Taula auditoria

CREATE TABLE auditoria (
    id INT PRIMARY KEY AUTO_INCREMENT,
    accio VARCHAR(50),
    data_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Crear el Trigger

CREATE TRIGGER after_insert_empleats
AFTER INSERT ON empleats
FOR EACH ROW
BEGIN
    INSERT INTO auditoria (accio) VALUES ('Inserció en empleats');
END;

Explicació del Codi

  • AFTER INSERT ON empleats: El trigger s'executa després d'una inserció en la taula empleats.
  • FOR EACH ROW: El trigger s'executa per a cada fila afectada per l'esdeveniment.
  • BEGIN ... END: Bloc de codi que conté l'acció a executar. En aquest cas, inserim un registre a la taula auditoria amb l'acció 'Inserció en empleats'.

Exercicis Pràctics

Exercici 1: Crear un Trigger de Validació

Crea un trigger que impedeixi la inserció d'un empleat amb un salari inferior a 1000.

Solució

CREATE TRIGGER before_insert_empleats
BEFORE INSERT ON empleats
FOR EACH ROW
BEGIN
    IF NEW.salari < 1000 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'El salari ha de ser almenys 1000';
    END IF;
END;

Exercici 2: Crear un Trigger d'Actualització

Crea un trigger que actualitzi la taula auditoria cada vegada que es faci una actualització en la taula empleats.

Solució

CREATE TRIGGER after_update_empleats
AFTER UPDATE ON empleats
FOR EACH ROW
BEGIN
    INSERT INTO auditoria (accio) VALUES ('Actualització en empleats');
END;

Errors Comuns i Consells

  • Error de Sintaxi: Assegura't de seguir la sintaxi correcta per a la creació de triggers.
  • Recursivitat Involuntària: Evita que un trigger activi un altre trigger que torni a activar el primer, creant un bucle infinit.
  • Mala Gestió d'Errors: Utilitza SIGNAL per gestionar errors i proporcionar missatges d'error clars.

Conclusió

Els triggers són una eina poderosa per automatitzar tasques i mantenir la integritat de les dades en una base de dades. Amb una comprensió clara de com i quan utilitzar-los, pots millorar significativament la funcionalitat i la seguretat de les teves aplicacions de bases de dades.

En el següent tema, explorarem les Vistes, una altra característica avançada de SQL que permet simplificar consultes complexes i millorar la seguretat de les dades.

Curs de SQL

Mòdul 1: Introducció a SQL

Mòdul 2: Consultes bàsiques de SQL

Mòdul 3: Treballar amb múltiples taules

Mòdul 4: Filtratge avançat de dades

Mòdul 5: Manipulació de dades

Mòdul 6: Funcions avançades de SQL

Mòdul 7: Subconsultes i consultes niades

Mòdul 8: Índexs i optimització del rendiment

Mòdul 9: Transaccions i concurrència

Mòdul 10: Temes avançats

Mòdul 11: SQL en la pràctica

Mòdul 12: Projecte final

© Copyright 2024. Tots els drets reservats