Riassunti
Appunti universitari in formato Markdown da Obsidian.
Triggers
download Scarica MDUn trigger è un oggetto di database archiviato che viene eseguito automaticamente in risposta a un evento di modifica dei dati su una tabella.
Gli eventi di modifica dei dati includono inserimento, aggiornamento ed eliminazione causati dalle istruzioni di inserimento, aggiornamento ed eliminazione.
MariaDB ha archiviato i trigger come oggetti denominati nel dizionario dei dati. Un trigger è sempre associato a una tabella.
Tipi di trigger MariaDB
MariaDB supporta i seguenti tipi di trigger:
-
il trigger insert viene eseguito automaticamente quando un'istruzione insert aggiunge una nuova riga a una tabella;
-
il trigger update viene attivato automaticamente quando un'istruzione di aggiornamento modifica i dati su una tabella;
-
il trigger delete viene richiamato automaticamente quando un'istruzione delete rimuove una o più righe da una tabella. MariaDB classifica ulteriormente ogni tipo di trigger in base al tempo di trigger, inclusi before e after:
-
un trigger before viene attivato subito prima che si verifichi un evento. Ad esempio, prima che si verifichi l'evento di inserimento, è possibile convalidare i valori che vengono inseriti. In genere, si utilizza un trigger prima per la pulizia e la modifica dei dati.
-
un trigger after viene richiamato dopo che si verifica un evento. In genere, si utilizza un trigger after per mantenere gli audit trail. Quando combini l'ora di attivazione e l'evento, puoi avere fino a sei attivazioni per tabella:
-
before insert
-
after insert
-
before update
-
after update
-
before delete
-
after delete A partire da MariaDB 10.2.3, è possibile definire più trigger per lo stesso tempo di trigger (before e after) ed eventi di trigger (insert, update, delete).
MariaDB esegue un trigger per ogni riga interessata dall'evento di insert, update e delete. Questo trigger è chiamato trigger a livello di riga.
Se un trigger viene attivato esclusivamente in base all'evento trigger, indipendentemente dal numero di righe interessate, il trigger viene chiamato trigger a livello di istruzione. Attualmente, MariaDB non supporta i trigger a livello di istruzione.
Triggers vs. stored procedures
Analogamente alle stored procedure, i trigger contengono codice procedurale. La tabella seguente mostra le principali differenze tra trigger e stored procedure:
Gestire i trigger in MariaDB
- Crea un trigger: crea un nuovo trigger utilizzando l'istruzione create trigger.
- Elimina trigger: rimuove un trigger dal database utilizzando l'istruzione drop trigger.
CREATE TRIGGER statement
L'istruzione create trigger consente di creare un nuovo trigger in un database. Quanto segue illustra la sintassi di base dell'istruzione create trigger:
create trigger trigger_name
{before | after} {insert | update | delete }
on table_name for each row
trigger_body;
In questa sintassi:
- In primo luogo, specificare il nome del trigger che si desidera creare dopo le parole chiave create trigger. Il nome del trigger deve essere distinto all'interno di un database;
- In secondo luogo, specificare l'ora dell'azione in cui viene richiamato il trigger. Il tempo di azione può essere before o after la modifica di una riga;
- Terzo, specificare un evento che attiva il trigger. MariaDB supporta insert, update e delete degli eventi;
- Quarto, indicare il nome della tabella a cui appartiene il trigger dopo la parola chiave on;
- Infine, specificare una o più istruzioni da eseguire quando viene richiamato il trigger.
Se vuoi eseguire più istruzioni, inseriscile all'interno dell'istruzione composta BEGIN END.
All'interno del corpo del trigger, è possibile accedere ai valori delle colonne interessate da un'istruzione di insert, update o delete. I modificatori old e new consentono di accedere ai valori delle colonne prima e dopo l'evento di attivazione.
Ad esempio, se aggiorni la colonna gdp, all'interno del corpo del trigger di aggiornamento, puoi accedere al valore del vecchio e del nuovo valore della colonna gdp utilizzando queste sintassi: old.gdp e new.gdp.
Questa tabella mostra la disponibilità dei modificatori old e new in ciascun trigger:
DROP TRIGGER statement
L'istruzione drop trigger elimina un trigger da un database. Quanto segue mostra la sintassi dell'istruzione drop trigger:
drop trigger [if exists] trigger_name;
In questa sintassi:
- Innanzitutto, specifica il nome del trigger che desideri eliminare dopo le parole chiave drop trigger;
- In secondo luogo, utilizzare la clausola facoltativa if exists per eliminare condizionalmente un trigger solo se esiste. Se rilasci un trigger inesistente senza la clausola if exist, MariaDB emetterà un errore. Tuttavia, se si utilizza la clausola if exist, MariaDB emetterà una NOTE.
Per eseguire correttamente l'istruzione drop trigger, è necessario disporre del privilegio di trigger per la tabella associata al trigger.
Quando rimuovi una tabella, MariaDB rimuove automaticamente tutti i trigger associati alla tabella eliminata.
Facciamo un esempio: innanzitutto, crea un trigger associato alla tabella country_stats:
delimiter $$
create trigger before_stat_update
before update
on country_stats for each row
begin
if new.population > old.population * 2 then
signal sqlstate '45000'
set message_text='Error! the new population is too high.';
end if;
end$$
delimiter
In secondo luogo, mostra i trigger:
show triggers;
Terzo, rilascia il trigger before_stat_update:
drop trigger if exists before_stat_update;
Infine, verifica l'eliminazione mostrando nuovamente i trigger:
show triggers;
Come puoi vedere dall'output, il trigger before_stat_update è stato eliminato.