I trigger sono oggetti associati a tabelle, che vengono attivati nel momento in cui un determinato evento si verifica relativamente a quella tabella.
Quando definiamo un trigger, stabiliamo per quale evento deve essere attivato (inserimento di righe, modifiche o cancellazioni) e se deve essere eseguito prima o dopo tale evento; avremo quindi i seguenti tipi di trigger:
Il trigger stabilirà un'istruzione (o una serie di istruzioni) che saranno eseguite per ogni riga interessata dall'evento.
Ecco la sintassi per la creazione di un trigger:
| CREATE TRIGGER nome tipo ON tabella FOR EACH ROW istruzioni |
Il trigger è associato ad una tabella, ma fa parte di un database, per cui il suo nome deve essere univoco all'interno del db stesso.
È importante tener presente che, riferendosi ad inserimenti o a cancellazioni delle righe, non si intende necessariamente una istruzione INSERT o DELETE, ma qualsiasi operazione dalla quale scaturisca l'evento interessato.
Le istruzioni da eseguire all'attivazione del trigger possono essere una o più di una. In quest'ultimo caso si usa la sintassi per le istruzioni composte del tipo BEGIN .... END.
Una volta creato, il trigger può essere eliminato con l'istruzione DROP TRIGGER:
| DROP TRIGGER [database.]nome |
Vediamo un esempio pratico di trigger:
| CREATE TRIGGER upd_check BEFORE UPDATE ON account FOR EACH ROW BEGIN IF NEW.amount < 0 THEN SET NEW.amount = 0; ELSEIF NEW.amount > 100 THEN SET NEW.amount = 100; END IF; END; |
Questo codice si attiva prima di ogni update sulla tabella account: su ognuna delle righe da modificare viene controllato il valore che sta per essere assegnato al campo amount, per verificare che sia compreso fra 0 e 100; in caso contrario viene riportato entro tali limiti.