Trigger
è una procedura che viene eseguita in maniera automatica in coincidenza di un determinato evento, come ad esempio la cancellazione di un record di una tabella. In questo modo si ha a disposizione una tecnica per specificare e mantenere vincoli di integrità anche complessi. I trigger permettono agli utenti di specificare vincoli di integrità più complessi dato che un trigger è essenzialmente una procedura. Tale procedura è quindi associata ad una tabella e viene automaticamente richiamata dal motore del database quando una certa modifica (o evento) avviene all'interno della tabella. Le modifiche sulla tabella possono includere operazioni insert, update, e delete.
Modello ECA di un trigger
L'evento (Event) può essere:
- un'operazione di aggiornamento del database
- un evento sistematico
- un evento esterno
La condizione (Condition), definisce la condizione da verificarsi prima di procedere all'esecuzione della regola. La condizione è facoltativa:
- se non viene specificata, la regola viene eseguita ogni volta che si verifica l'evento.
- se è specificata, la regola viene eseguita solo se la condizione risulta verificata.
L'azione (Action), di solito è una sequenza di comandi SQL e/o di codice scritto con linguaggi di programmazione proprietari.
Regole relazionali
Le regole relazionali possono avere due modalità:
- immediata: la valutazione avviene immediatamente all'attivazione del trigger. Si può distinguere a sua volta:
- opzione before: prima che l'operazione che lo ha generato abbia effetto;
- opzione after: dopo che l'operazione che lo ha generato ha eseguito le operazioni sulla base di dati.
differita : la valutazione avviene alla fine della transazione, a seguito del comando COMMIT.
In generale ragionare con i trigger è complesso, in quanto si possono anche avere attivazioni in cascata. „ Quando si ha attivazione in cascata è possibile avere anche cicli infiniti.
e due livelli di granularità:
- row-level: l'attivazione avviene per ogni tupla coinvolta nell'evento;
- statement-level: l'attivazione avviene per ogni primitiva SQL.
NOTA: se nessuna tupla è coinvolta nel comando SQL, i triggerrow-levelnon verranno eseguiti, mentre quellistatement-levelsì.