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
oDELETE
. - Moment: Quan s'executa el trigger en relació amb l'esdeveniment, pot ser
BEFORE
(abans) oAFTER
(després). - Acció: El codi SQL que s'executa quan el trigger és activat.
Tipus de Triggers
- BEFORE Triggers: S'executen abans que l'esdeveniment es completi.
- AFTER Triggers: S'executen després que l'esdeveniment es completi.
- 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
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web