Trabalhando com Trigger no MySQL

Gunnar CorreaGunnar Correa23/07/2015 às 09:29:14 - 20.834 acessos

Utilize Trigger para criar rotinas automáticas apenas utilizando o próprio banco de dados.


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.

Tabelas no MySQL relacionadas

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");

Consulta tabelas no MySQL

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
AFTERINSERTON Tabela_que_vai_diparar
FOR EACH ROW BEGIN
...Código...
END;

 

CREATETRIGGER: Cria o objeto Trigger.
AFTER: Depois de uma ação.
INSERT: Inserir.
ON: Tabela que fará o disparo.
FOREACHROW: 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.

Trigger no MySQL

Para exibir as Trigger criadas no banco de dados, utilizamos o código SHOW TRIGGERS.

Código 03:

SHOW TRIGGERS;

 

Consulta de Trigger no MySQL

Para deletar uma Trigger, utilize o DROPTRIGGERnome_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.


Trigger Before After Begin MySQL SQL PL/SQL Database Banco de dados Aula Artigo Servidor Rotinas Update Tabelas

Compartilhe


Gunnar Correa

Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web (FIPP), Especialista em Tecnologias na Educação (Unoeste) e Pós-graduando em Segurança da Informação (Universidade Cruzeiro do Sul). Começou seus estudos na área de programação quando era criança, e atualmente está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.



Site atualizado

Olá, nosso site recebeu uma nova atualização e por conta disso, alguns artigos ainda estão sendo atualizados. Dependendo do conteúdo que você procura, poderá encontrar imagens e trechos de códigos mal formatados.

Estamos trabalhando para normalizar todos os conteúdos, muito em breve, esse problema não mais existirá.


Comentários