Você está na página 1de 6

Manipulao de triggers no MySQL

Triggers
Triggers so eventos que voc pode programar para que sejam executados antes (BEFORE)
ou depois (AFTER) de fazer uma insero (INSERT), alterao (UPDATE) ou uma remoo
(DELETE) de registros de uma determinada tabela (ON TABLEnome_da_tabela).

Nas verses 5.1.x voc ter permisses para fazer os processos abaixo;

No MySQL 5.0.x, apesar de suportada, seu usurio no tem permisso para realizar o
procedimento abaixo, neste caso ser preciso solicitar a instalao de uma nova base de
dados e migrar os dados da base atual (SSH ou phpMyAdmin) para a base
nova (SSH ou phpMyAdmin);

Para saber a verso do MySQL entre no phpMyAdmin, logo aps informar seu

usurio e senha voc ver a VERSO DO SERVIDOR (ateno, no confundir


com verso do cliente).

Criando
Sintaxe:
DELIMITER //
CREATE TRIGGER nome_da_trigger AFTER/BEFORE INSERT/UPDATE/DELETE
ON nome_da_tabela
FOR EACH ROW
BEGIN
-- sua query aqui terminando com ponto-e-vrgula
END //
DELIMITER ;
Exemplo:

DELIMITER //
CREATE TRIGGER minha_trigger AFTER INSERT ON minha_tabela1
FOR EACH ROW
BEGIN
DELETE FROM minha_tabela2;
END //
DELIMITER ;

Removendo
DROP TRIGGER nome_da_trigger;

Como visualizar todas triggers


SHOW TRIGGERS;

Triggers
Trigger um recurso de programao executado sempre que o evento
associado ocorrer. Trigger um tipo especial de procedimento armazenado, que
executado sempre que h uma tentativa de modificar os dados de uma tabela
que protegida por ele. muito utilizada para ajudar a manter a consistncia
dos dados ou para propagar alteraes em um determinado dado de uma
tabela para outras. Um bom exemplo um gatilho criado para controle de
quem alterou a tabela, nesse caso, quando a alterao for efetuada, a trigger
"disparada" e grava em uma tabela de histrico de alterao, o usurio e
data/hora da alterao.

Prs e Contras das Triggers


Os principais pontos positivos sobre os triggers so:

Parte do processamento que seria executado na aplicao passa para o

banco, poupando recursos da mquina cliente.


Facilita a manuteno, sem que seja necessrio alterar o cdigo fonte da
aplicao.
J contra sua utilizao existem as seguintes consideraes:

Algum que tenha acesso no autorizado ao banco de dados poder

visualizar e alterar o processamento realizado pelos gatilhos.


Requer maior conhecimento de manipulao do banco de dados (SQL)
para realizar as operaes internamente.
A seguir explicado o processo de criao de triggers, a sintaxe utilizada
e o significado de cada instruo.
A sintaxe dos comandos para criar um novo trigger no MySQL a
seguinte:
CREATE TRIGGER nome momento evento
ON tabela
FOR EACH ROW
BEGIN
/*corpo do cdigo*/
END
Onde se tem os seguintes parmetros:

nome: nome do trigger, segue as mesmas regras de nomeao dos

demais objetos do banco.


momento: quando o trigger ser executado. Os valores vlidos so

BEFORE (antes) e AFTER (depois).


evento: evento que vai disparar o trigger. Os valores possveis so
INSERT, UPDATE e DELETE. Vale salientar que os comandos LOAD DATA e
REPLACE tambm disparam os eventos de insero e excluso de registros,

com isso, os gatilhos tambm so executados.


tabela: nome da tabela a qual o gatilho est associado.
No possvel criar mais de um trigger para o mesmo evento e momento
de execuo na mesma tabela. Por exemplo, no se pode criar dois triggers
AFTER INSERT na mesma tabela.

Os registros NEW e OLD


Como os triggers, so executados em conjunto com operaes de incluso
e excluso, necessrio poder acessar os registros que esto sendo includos
ou removidos. Isso pode ser feito atravs das palavras NEW e OLD. Em triggers
executados aps a insero de registros, a palavra reservada NEW d acesso ao
novo registro. Pode-se acessar as colunas da tabela como atributo do registro
NEW, como veremos nos exemplos.
O operador OLD funciona de forma semelhante, porm em triggers que
so executados com a excluso de dados, o OLD d acesso ao registro que est
sendo removido.

Utilizao do trigger
Para exemplificar e tornar mais clara a utilizao de triggers, simulado a
seguinte situao: um mercado que, ao realizar vendas, precisa que o estoque
dos produtos seja automaticamente reduzido. A devoluo do estoque deve
tambm ser automtica no caso de remoo de produtos da venda.
Como se trata de um ambiente hipottico, teremos apenas duas tabelas
de estrutura simples, cujo script de criao mostrado na listagem a seguir.
CREATE TABLE produtos (
referencia VARCHAR(3) PRIMARY KEY,
descricao
VARCHAR(50) UNIQUE,
estoque INT NOT NULL
);
INSERT INTO Produtos VALUES ('1', 'Lasanha', 10);
INSERT INTO Produtos VALUES ('2', 'Morgango', 5);
INSERT INTO Produtos VALUES ('3', 'Farinha', 15);
CREATE TABLE itensvenda (
venda INT,
produto VARCHAR(3),

);

quantidade

INT

Ao inserir e remover registro da tabela itensvenda, o estoque do produto


referenciado deve ser alterado na tabela produtos. Para isso, sero criados dois
triggers: um AFTER INSERT para dar baixa no estoque e um AFTER DELETE
para fazer a devoluo da quantidade do produto.
DELIMITER;;
CREATE TRIGGER tgr_itensvenda_insert AFTER INSERT
ON itensvenda
FOR EACH ROW
BEGIN
UPDATE produtos SET estoque = Estoque - NEW.quantidade
WHERE referencia = NEW.produto;
END;
CREATE TRIGGER tgr_itensvenda_delete AFTER DELETE
ON itensvenda
FOR EACH ROW
BEGIN
UPDATE produtos SET estoque = estoque + OLD.quantidade
WHERE referencia = OLD.produto;
END;
DELIMITER;

No primeiro trigger, foi utilizado o registro NEW para obter as informaes


da linha que est sendo inserida na tabela. O mesmo feito no segundo trigger,
onde se obtm os dados que esto sendo apagados da tabela atravs do
registro OLD. Tendo criado os triggers, pode-se test-los inserindo dados na
tabela itensvenda. Nesse caso, simulado uma venda de nmero 1 que contem
trs unidades do produto 1, uma unidade do produto 2 e cinco unidades do
produto 3.
Insere dados na tabela.
INSERT INTO itensvenda VALUES (1, '1',3);
INSERT INTO itensvenda VALUES (1, '2',1);
INSERT INTO itensvenda VALUES (1, '3',5);

Nota-se que o estoque dos produtos foi corretamente reduzido, de acordo


com as quantidades "vendidas". Agora para testar o trigger da excluso, ser
removido o produto 1 dos itens vendidos. Com isso, o seu estoque deve ser
alterado para o valor inicial, ou seja, 10.
DELETE FROM itensvenda WHERE venda = 1 AND produto = '1';

Em ambientes reais, triggers podem ser utilizados para operaes mais


complexas, por exemplo, antes de vender um item, verificar se h estoque
disponvel e s ento permitir a sada do produto.

Atividade de Fixao
No intuito de fixar a aprendizagem iniciada com o estudo deste mdulo, e
verificar como seu entendimento sobre este contedo est, alguns exerccios
esto lhe sendo sugeridos como atividade de fixao neste momento. Clique na
ligao virtual Exerccios, que est disponvel no final do menu lateral
esquerda, e proceda da maneira indicada para solucion-los.