CREATE TRIGGER
Sintassi
CREATE [OR REPLACE] [DEFINER = { utente | CURRENT_USER | role | CURRENT_ROLE }] TRIGGER [IF NOT EXISTS] nome_trigger tempo evento ON nome_tab FOR EACH ROW istruzioni_trigger
Contents
Spiegazione
Questa istruzione crea un nuovo trigger. Un trigger è un oggetto dei database con nome, associato a una tabella, che si attiva quando un particolare evento si verifica sulla tabella. Il trigger viene associato alla tabella chiamata nome_tab, che deve essere una tabella permanente. Non è possibile associare un trigger a una tabella temporanea o una vista.
Per eseguire CREATE TRIGGER è necessario il privilegio TRIGGER sulla tabella associata al trigger. (Prima di MySQL 5.1.6, questa istruzione richiedeva il privilegio SUPER.)
La clausola DEFINER determina il contesto di sicurezza da usare per verificare i privilegi quando il trigger si attiva.
tempo è il momento in cui agisce il trigger. Può essere BEFORE o AFTER per indicare che il trigger si attiva prima o dopo la modifica di una certa riga.
evento indica il tipo di istruzione che deve attivare il trigger. Può essere uno dei seguenti:
- INSERT: Il trigger si attiva quando una nuova riga viene inserita nella tabella; per esempio con le istruzioni INSERT, LOAD DATA e REPLACE.
- UPDATE: Il trigger si attiva quando una riga viene modificata; per esempio, con le istruzioni UPDATE.
- DELETE: Il trigger si attiva quando una riga viene eliminata dalla tabella; per esempio, con le istruzioni DELETE e REPLACE. Tuttavia, le istruzioni DROP TABLE e TRUNCATE non attivano i trigger, perché non usano DELETE. Nemmeno l'eliminazione di una partizione attiva DELETE.
Examples
CREATE DEFINER=`root`@`localhost` TRIGGER increment_animal AFTER INSERT ON animals FOR EACH ROW UPDATE animal_count SET animal_count.animals = animal_count.animals+1;
OR REPLACE, IF NOT EXISTS
CREATE DEFINER=`root`@`localhost` TRIGGER increment_animal AFTER INSERT ON animals FOR EACH ROW UPDATE animal_count SET animal_count.animals = animal_count.animals+1; ERROR 1359 (HY000): Trigger already exists CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER increment_animal AFTER INSERT ON animals FOR EACH ROW UPDATE animal_count SET animal_count.animals = animal_count.animals+1; Query OK, 0 rows affected (0.12 sec) CREATE DEFINER=`root`@`localhost` TRIGGER IF NOT EXISTS increment_animal AFTER INSERT ON animals FOR EACH ROW UPDATE animal_count SET animal_count.animals = animal_count.animals+1; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql [localhost] {msandbox} (test) > SHOW WARNINGS; +-------+------+------------------------+ | Level | Code | Message | +-------+------+------------------------+ | Note | 1359 | Trigger already exists | +-------+------+------------------------+ 1 row in set (0.00 sec)