Triggers de SQL

octubre 5, 2021 Por admin 1

Os triggers son una especie de disparadores de eventos que salta cando se elimina, modifica ou engade un rexistro.

Hay dous momentos de acción:

BEFORE – Antes da acción

AFTER – Despois da acción

Tamén hay tres tipos de accións:

I – Insertar

U – Modificar

D – Borrar

Aos triggers, hai que poñelos un nome, e existe unha convención (non obrigatoria) para poñelos.

Táboa+_+Momento+Acción

Por exemplo:

PRODUCTOS_AI

A continuación poño uns exemplos de sintaxes.

Facer un trigger que engada un rexistro das insercións dunha táboa, nunha táboa de rexistro e garde a hora e data:

CREATE TRIGGER TiggerName_AI AFTER INSERT ON Table FOR EACH ROW INSERT INTO Log_Table (Field1, Field2, Field3, Date) VALUES(NEW.Field1, NEW.Field2, NEW.Field3, NOW())

Facer un trigger que engada un rexistro das modificacións dunha taboa, nunha táboa de respaldo e garde o usuario mais a hora e data:

CREATE TRIGGER TiggerName_BU BEFORE UPDATE ON Table FOR EACH ROW INSERT INTO Backing_Table (Previous_Field1, Previous_Field2, Previous_Field3, New_Field1, New_Field2, New_Field3, User, Date) VALUES(OLD.Field1, OLD.Field2, OLD.Field3, NEW.Field1, NEW.Field2, NEW.Field3, CURRENT_USER(), NOW())

Facer un trigger que engada un rexistro dos borrados dunha taboa, nunha táboa de respaldo e garde o usuario mais a hora e data:

CREATE TRIGGER TiggerName_AD AFTER DELETE ON Table FOR EACH ROW INSERT INTO Backing_Table (Field1, Field2, Field3, User, Date) VALUES(OLD.Field1, OLD.Field2, OLD.Field3, CURRENT_USER(), NOW())

Modificar un trigger engadindo dous campos (primeiro elimina o trigger e despois o volve a crear):

DROP TRIGGER IF EXIST Trigger_Name; CREATE TRIGGER NewTiggerName_AD AFTER DELETE ON Table FOR EACH ROW INSERT INTO Backing_Table (Field1, Field2, Field3, User, Date) VALUES(OLD.Field1, OLD.Field2, OLD.Field3, CURRENT_USER(), NOW())

Eliminar un trigger:

DROP TRIGGER Trigger_Name