Trabalhando com Trigger no MySQL

Todos os nossos cursos em promoção

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

Publicado em

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
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
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çãoAção
AFTERDepois de executar uma ação
BEFOREAntes 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çãoAção
DELETEQuando for deletar algo na tabela.
UPDATEQuando for alterar algo na tabela.
INSERTQuando 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
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
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.

Gunnar Correa
Gunnar Correa

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

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção


Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção