Prima di tutto, i trigger sono parti di codice che vengono eseguite quando un determinato evento (ad esempio INSERT/UPDATE/DELETE su una determinata tabella) si verifica nel database. I trigger vengono eseguiti implicitamente PRIMA o AFER dell'istruzione DML e i trigger non possono essere eseguiti esplicitamente come le stored procedure.
Esistono anche due tipi di trigger: trigger STATEMENT LEVEL e trigger ROW LEVEL.
I trigger STATEMENT LEVEL vengono attivati PRIMA o DOPO che viene eseguita un'istruzione.
I trigger RIGA LIVELLO vengono attivati PRIMA o DOPO che un'operazione viene eseguita su ogni singola riga interessata dall'operazione.
Così abbiamo 12 tipi di trigger:
1. BEFORE INSERT STATEMENT
2. BEFORE INSERT ROW
3. AFTER INSERT STATEMENT
4. AFTER INSERT ROW
5. BEFORE UPDATE STATEMENT
6. BEFORE UPDATE ROW
7. AFTER UPDATE STATEMENT
8. AFTER UPDATE ROW
9. BEFORE DELETE STATEMENT
10. BEFORE DELETE ROW
11. AFTER DELETE STATEMENT
12. AFTER DELETE ROW
più trigger possono essere codificati per un evento con il loro ordine di precedenza di esecuzione menzionato.
Ogni volta che si esegue una query DML (INSERT/UPDATE/DELETE) su un database, tale query viene eseguita in una transazione. Pertanto, quando una query viene eseguita -
- La tabella è bloccata
- I controlli DBMS per i trigger che vengono eseguiti prima che l'istruzione deve essere eseguito
- esegue l'istruzione SQL effettiva riga per riga.
- Si cerca il trigger BEFORE per EACH ROW. Se trovato, eseguito.
- Verificare la presenza di errori. Se presente, ripristina le modifiche apportate dall'istruzione o dai suoi trigger.
- Qualsiasi trigger AFTER EACH ROW viene trovato ed eseguito.
- Qualsiasi trigger AFTER STATEMENT viene trovato ed eseguito.
Diversi DBMS gestiscono le transazioni in modo diverso. Fare riferimento alla loro documentazione per i dettagli.
Molti DBMS mantengono i trigger solo in formato testo, non come stored procedure compilate.
È consigliabile richiamare procedure memorizzate all'interno di un corpo del trigger poiché le procedure memorizzate sono molto più veloci rispetto ai trigger.
Penso che questo dovrebbe probabilmente essere su [dba.se] ..; ma lo terrò d'occhio perché in realtà non lo so. – Ben