Trigger ou Gatilho, é um procedimento interno do banco dados MySQL e Oracle, que possibilita criar blocos de rotinas, que são disparadas/executadas quando houver alguma tentativa de modificação em uma tabela. Normalmente utilizada para manter a integridade da regra de negócio que não pode ser quebra.
A utilização de Trigger possui uma variedade de vantagens, algumas estão listadas abaixo.
- Regra de negócio concentrada no banco de dados.
- Processamento rápido.
- Criar blocos de rotinas que podem ser disparados antes ou depois de uma modificação.
A Trigger está presente desde a versão 5.0.2 do MySQL. Para disparar uma Trigger, basta executar alguma operação de Insert, Update ou Delete, porém as modificações podem ser realizadas em outra tabela.
Imagine que em um sistema de mercado possua duas tabelas, que são produto e pedidos, porém a tabela produto contém um campo com a quantidade mínima de estoque antes de gerar o pedido, então podemos utilizar a Trigger para fazer esta verificação, se após alguma operação na tabela produto o estoque for menor que a quantidade mínima, a Trigger realiza o cadastro de pedido na tabela pedido, informando o valor para atingir a quantidade máxima, código do produto e data de processamento. Tudo isto sem que o usuário ou vendedor perceba.
Para o exemplo deste artigo, será utilizado a estrutura de tabelas e valores a seguir.
Código 01:
CREATE TABLE aluno (
cod INT NOT NULL AUTO_INCREMENT,
nome VARCHAR (50) NOT NULL,
curso INT NOT NULL,
status INT NOT NULL,
PRIMARY KEY(cod)
);
CREATE TABLE curso(
cod INT NOT NULL AUTO_INCREMENT,
descricao VARCHAR (200) NOT NULL,
PRIMARY KEY (cod)
);
CREATE TABLE matricula(
cod INT NOT NULL AUTO_INCREMENT,
aluno_cod INT NOT NULL,
curso_cod INT NOT NULL,
PRIMARY KEY (cod)
);
INSERT INTO curso VALUES ("", "RADIOLOGIA");
INSERT INTO curso VALUES ("", "ENGENHARIA");
INSERT INTO curso VALUES ("", "ENGENHARIA DA TI");
INSERT INTO curso VALUES ("", "ADMINISTRAÇÃO");
A rega de negócio será a seguinte, quando for cadastrado um aluno em algum curso, será disparado uma Trigger que faz o cadastro na tabela matricula, informando o código do aluno e código do curso.
A Sintaxe para criação de uma Trigger é exibida abaixo.
CREATE TRIGGER Nome_da_trigger
AFTER INSERT ON Tabela_que_vai_diparar
FOR EACH ROW BEGIN
...Código...
END;
CREATE TRIGGER: Cria o objeto Trigger.
AFTER: Depois de uma ação.
INSERT: Inserir.
ON: Tabela que fará o disparo.
FOR EACH ROW: Para cada linha.
BEGIN: Início
END: Fim.
Veja abaixo a tabela dos valores de execução.
Opção | Ação |
AFTER | Depois de executar uma ação |
BEFORE | Antes de executar uma ação. |
Para o nosso caso, será utilizado o evento AFTER, pois, após o cadastro do aluno, a Trigger faz o cadastro automático na tabela matricula.
Podemos fazer as operações usando as ações, Insert, Update e Delete.
Opção | Ação |
DELETE | Quando for deletar algo na tabela. |
UPDATE | Quando for alterar algo na tabela. |
INSERT | Quando for inserir algo na tabela. |
Então, criamos a nossa Trigger conforme mostra o código a seguir.
Código 02:
SET DELIMITER $$
CREATE TRIGGER tg_matricula
AFTER INSERT ON aluno
FOR EACH ROW BEGIN
INSERT INTO matricula VALUES ("", NEW.cod, NEW.curso);
END;
Para que a Trigger fosse criada, foi necessário trocar o delimitador do MySQL para $$, pois como a Trigger utiliza o ;, o MySQL poderá entender como término da instrução e parar o processamento, gerando assim erros na execução.
No Insert, você deve ter notado o NEW.cod e NEW.curso, entenda sua funcionalidade e outro valor é que o OLD.
NEW: Permite retorna o novo valor que foi inserido, neste caso, retorna o código do usuário e curso que foi cadastrado.
OLD: Retorna o valor anterior do cadastro, ou seja, sem a alteração atual.
Com a Trigger criada, cadastramos um aluno, o resultado é apresentado na imagem a seguir, note que, a tabela matricula, possui o código do usuário e código curso, isto foi disparado através do Trigger.
Para exibir as Trigger criadas no banco de dados, utilizamos o código SHOW TRIGGERS.
Código 03:
SHOW TRIGGERS;
Para deletar uma Trigger, utilize o DROP TRIGGER nome_da_trigger.
Código 04:
DROP TRIGGER tg_matricula;
Com as Trigger é possível realizar operações mais detalhadas, como utilizar variáveis para armazenar valores de uma consulta, com este valor, você utilizar o IF para verificar se o valor é válido, caso contrário aborta a operação e não executa o Insert.
Para mais informações sobre a Trigger, confira a documentação, http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html.
Vamos ficando por aqui, se houverem dúvidas deixem nos comentários.