Você está na página 1de 16

Triggers

Gatilhos

Definio

Trigger, tambm chamado de gatilho, um recurso de programao, uma funo que executado sempre que um evento associado ocorrer. Estes eventos so os comandos de DML: Insert Replace Delete Update

Finalidade

Os triggers tem a funo de : realizar tarefas com validaes; restries de acesso; rotinas de segurana; consistncia de dados. Assim os triggers executam estas aes ,antes realizadas pela aplicao, nas seguintes situaes:

Finalidade

Criao de contedo de uma coluna derivada de outras colunas da tabela consistncia de dados; Realizar anlise e atualizaes em outras tabelas com base em alteraes e/ou incluses da tabela atual;

Mecanismos de validao envolvendo mltiplas tabelas;

Limitaes

Seguindo a regra, existe algumas limitaes para o uso de Triggers: No se pode criar um trigger para uma viso; O resultado da execuo do Trigger retornado para a aplicao que o chamou; No permitido utilizar em um trigger os seguintes comandos:
Alter Database, Alter Table, Alter View, Create Database, Create Index , Create Table, Drop Database, Drop Table, Drop Trigger(...) Dentre outros;

Criao de Triggers

O processo de criao de Triggers engloba duas etapas principais: O comando SQL que vai disparar o Trigger (Insert, update, Delete);

A ao que o Trigger vai executar ( Geralmente um bloco de cdigos SQL);

Criao de Triggers

A sintaxe geral de definio de um TRIGGER a seguinte:

Criao de Triggers
DEFINER:
Quando o TRIGGER for disparado, esta opo servir para checar com quais privilgios este ser disparado. Utilizar os privilgios do usurio informado em user (felipe@localhost) ou os privilgios do usurio atual (current_user). Caso essa sentena seja omitida da criao do TRIGGER, o valor padro desta opo CURRENT_USER();

Criao de Triggers
Trigger_name:
define o nome do procedimento, por exemplo, trg_test;

Trigger_time:
define se o TRIGGER ser ativado antes (BEFORE) ou depois (AFTER) do comando que o disparou;

Trigger_event:
aqui se define qual ser o evento, INSERT, REPLACE, DELETE ou UPDATE;

Criao de Triggers
tbl_name:
nome da tabela onde o TRIGGER ficar pendurado aguardando o trigger_event;

trigger_stmt:
as definies do que o o TRIGGER dever fazer quando for disparado.

Definir dados de antes (OLD) e depois (NEW)

Em meio aos TRIGGERS temos dois operadores importantssimos que nos possibilitam acessar as colunas da tabela alvo do comando DML, ou seja, podemos acessar os valores que sero enviados para a tabela tbl_cliente antes (BEFORE) ou depois (AFTER) de um evento. Tais operadores nos permitiro ento, ter dois momentos, o antes e o depois e tambm examinar os valores para que sejam ou no inseridos, atualizados ou excludos da tabela.

Definir dados de antes (OLD) e depois (NEW)


INSERT: o operador NEW.nome_coluna, nos permite verificar o valor enviado para ser inserido em uma coluna de uma tabela. OLD.nome_coluna no est disponvel.

DELETE: o operador OLD.nome_coluna nos permite verificar o valor excludo ou a ser excludo. NEW.nome_coluna no est disponvel.
UPDATE: tanto OLD.nome_coluna quanto NEW.nome_coluna esto disponveis, antes (BEFORE) ou depois (AFTER) da atualizao de uma linha.

Exemplo Prtico
create database triggers_aula;

use triggers_aula;
create table tbl_cliente ( cliente_id int unsigned auto_increment primary key , cliente_nome char(50) not null, cliente_email char(40) not null, dt_cadastro timestamp default current_timestamp );

Exemplo Prtico
create table tbl_cliente_exc( cliente_id int unsigned auto_increment primary key , cliente_nome char(50) not null, cliente_email char(40) not null, dt_cadastro timestamp default current_timestamp ); create trigger exclusao_cliente before delete on tbl_cliente for each row insert into tbl_cliente_exc(cliente_nome,cliente_email,dt_cadastro) values (old.cliente_nome,old.cliente_email,old.dt_cadastro); insert into tbl_cliente(cliente_nome,cliente_email) values (Vanessa', vanessadossantos@xpc.com');

Exemplo Prtico
select * from tbl_cliente; select * from tbl_cliente_exc; delete from tbl_cliente WHERE cliente_id =3; select * from tbl_cliente; select * from tbl_cliente_exc; show triggers; drop trigger exclusao_cliente;

Referncias
SQL - Triggers. Disponvel em: < http://www.macoratti.net/sql_trig.htm>. Acesso em: 15 de Ago. 2012. MySQL TRIGGERS. Disponvel em: < http://www.devmedia.com.br/mysqltriggers/8088>. Acesso em: 15 de Ago. 2012. Exemplos de Triggers no MySQL. Disponvel em: < http://blog.robsonmedeiros.com/2007/09/exemplos-de-triggers-no-mysql.html>. Acesso em: 15 de Ago. 2012. MySQL Trigger(Gatilho). Disponvel em: < http://blog.fabianobento.com.br/2010/09/mysql-trigger/>. Acesso em: 15 de Ago. 2012.