468x60

giovedì 23 aprile 2009

MySql Trigger - una importante funzionalità avanzata

I Trigger sono una funzionalità avanzata molto utile introdotta con MySql 5.0. Brevemente i trigger, permettono di applicare un controllo sull'integrità dei dati inseriti, di verificarne la correttezza ed eventualmente di modificarli. Prima di essere utilizzati i trigger devono essere dichiarati mediante apposita query. Vedremo anche degli esempi concreti, ma prima di tutto scopriamone la sintassi.

- Sintassi
La dichiarazione di un trigger si presenta in questo modo:
CREATE TRIGGER nome_del_trigger
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON nome_della_tabella
FOR EACH ROW
codice_SQL_da_applicare_con_il_trigger
  1. La prima linea indica il nome del trigger
  2. La seconda linea determina il tempo di esecuzione del trigger
  3. La terza linea introduce il tipo di query SQL che genererà l'esecuzione del trigger. La query può essere solo di tipo esecutivo quindi INSERT, UPDATE, DELETE ma non SELECT. In base al tipo di query ci troveremo a poter intervenire sul record già presente nel database (nel caso ad esempio di una query UPDATE o DELETE) oppure sul record nuovo che andremo ad inserire o a sostituire (query UPDATE o INSERT). Da notare che INSERT non rappresenta soltanto le query di tipo INSERT, bensì tutte le query che inseriscono dati ex-novo come LOAD DATA o REPLACE in caso di un record nuovo. Allo stesso modo vanno interpretati UPDATE e DELETE
  4. La quarta linea specifica la tabella da monitorare per attivare il trigger
  5. La quinta linea illustra l'individualità del trigger che infatti si applica ad ogni riga singolarmente e non a tutta la tabella nel suo insieme
  6. La sesta linea infine rappresenta il codice SQL da eseguire all'attivazione dell'evento
- Il codice da eseguire
Il codice SQL da eseguire all'attivazione del trigger devono essere istruzioni seguite ognuna da punto e virgola.

- Esempio di utilizzo
Nel seguente esempio creiamo un trigger chiamato `nome_trigger` che, ad ogni inserimento nella tabella `nome_db`.`nome_tabella`, esegue il codice SQL contenuto tra le istruzioni "BEGIN" ed "END".

DELIMITER $$

DROP TRIGGER `nome_db`.`nome_trigger`$$

CREATE
TRIGGER `nome_trigger` BEFORE INSERT ON `nome_tabella`
FOR EACH ROW BEGIN

DECLARE cod INTEGER;
SELECT MAX(nome_campo)
INTO cod
FROM nome_tabella
WHERE [condizioni];

IF cod IS NULL THEN SET cod=0;
END IF;

SET NEW.nome_campo=cod+1;

END;$$

DELIMITER;

Nessun commento:

Posta un commento

468x60

Cerca su Google

Cerca nel Blog con Google