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 //

CREATETRIGGER exemplo_trigger AFTER/BEFOREINSERT/UPDATE/DELETEON


nome_da_tabela
FOR EACH ROW
BEGIN
-- COMANDO
END//

DELIMITER ;

Exemplo:
DELIMITER //

CREATETRIGGER exemplo_trigger AFTER INSERTON tabela1


FOR EACH ROW
BEGIN
DELETEFROM tabela2;
END//

DELIMITER ;

Removendo

DROPTRIGGERnome_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;;

-- 1 Trigger
CREATE TRIGGER tgr_venda_insert AFTER INSERT
ON venda
FOR EACH ROW
BEGIN
UPDATE produtos SET estoque = Estoque - NEW.quantidade
WHERE referencia = NEW.produto;
END;

-- 2 Trigger
CREATE TRIGGER tgr_venda_delete AFTER DELETE
ON venda
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.

Você também pode gostar