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

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)

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.