TRIGGER OU GATILHO é um escutador, ou seja, escuta se teve um insert, update ou delete em uma tabela em que está associado. Em poucas palavras, triggers são executados (ou disparados) implicitamente quando uma tabela é modificada, um objeto é criado ou quando ocorrem algumas ações de usuário ou de sistema de banco de dados. Outro fator importante é que uma Trigger só serve para a tabela em que está amarrada. Portanto, se não acontecer um evento(insert, update ou delete) ela não dispara.
ATENÇÃO: quando a Trigger tem um erro de lógica , ela não monitora a coluna.
RESTRIÇÕES EM RELAÇÃO À TRIGGERS
Pois bem, assim como o ser humano possui liberdades e essas liberdades tem um teto( restrições impostas pela lei para limitar certas ações dos indivíduos), isso também ocorre com as triggers. Acredite! Ao implementar este maravilhoso recurso, você vai se deparar com várias restrições, não se assuste, é muito não, atrás de não. Okay? então tá combinado. Aqui, vamos destacar as principais, veja a seguir:
Não é permitido iniciar ou finalizar transações em meio à TRIGGERS(Start transaction, commit ou Roolback); A intrução Rollback to savepoint é permitido porque ele não termina uma transação.
Não se pode criar TRIGGERS para uma tabela temporária – TEMPORARY TABLE;
Não se pode chamar diretamente um TRIGGER com CALL, como se faz com um Stored Procedure;
TRIGGERS ainda não podem ser implementadas com a intenção de devolver para o usuário ou para uma aplicação mensagens de erros.
Para cada tabela de um banco de dados, podemos ter no máximo 6 TRIGGERS
POR QUE USAR TRIGGERS?
TRIGGERS são um grande aliado para melhorar a segurança e performance dentro do banco de dados e por isso, sua implementação é muito recomendada. Abaixo, temos os mais diversos motivos para usá-la :- Triggers garantem uma segurança maior no nosso banco, ela tem como tarefa restringir o acesso as tabelas, impedir transações inválidas e controlar as atualizações;
- A partir das Triggers podemos criar controles mais complexos para os relacionamento das tabelas.
- Através do trigger, podemos gerar alguns valores de coluna derivados automaticamente;
- Triggers são excelentes para criar uma política de replicação síncrona de uma tabela para outra.
OLD E NEW - os operadores que fazem a mágica acontecer
OLD: operador para ser utilizado no interior da TRIGGER para recuperar o valor anterior à um UPDATE, ou DELETE;
NEW: operador para ser utilizado no interior da TRIGGER para recuperar dados atuais a partir de comandos INSERT, e UPDATE.
Lembre-se - o Trigger no MySQL é um objeto de banco de dados que pode ser chamado antes ou depois de um evento e, quando associado a uma tabela, ele será ativado assim que você executar uma das seguintes instruções do MySQL na tabela: INSERT, UPDATE e DELETE.
EXERCÍCIO DE ESTUDO
Imagine a seguinte situação: um mercado, ao realizar vendas, precisa que o estoque dos produtos seja automaticamente reduzido. A devolução do estoque deve também ser automática no caso de remoção de produtos da venda.
CREATE DATABASE BDD4; #para criar o banco de dados com o nome BDD4
USE BDD4; #para usar o banco de dados e criar as tabelas
CREATE TABLE produtos (
id_produto INT(3) PRIMARY KEY,
descricao VARCHAR(50) UNIQUE,
estoque INT NOT NULL
);
#INSERINDO VALORES NA TABELA PRODUTOS
INSERT INTO produtos (id_produto,descricao,estoque) VALUES (1, 'Arroz', 21);
INSERT INTO produtos (id_produto,descricao,estoque) VALUES (2, 'Feijão', 13);
INSERT INTO produtos (id_produto,descricao,estoque) VALUES (3, 'Tomate', 9);
Vamos fazer um select * from produtos; para visualizar os dados inseridos na tabela produtos
id_venda INT, cod_produto INT(3), quantidade INT
);
quantidade) VALUES (1,1,3);
INSERT INTO itensvenda(id_venda,cod_produto,
quantidade) VALUES (1, 2,1);
Vamos fazer um select * from itensvenda; para visualizar os dados inseridos na tabela itensvenda
Vamos fazer um select * from produtos; para visualizar se os dados inseridos na tabela itensvenda afetaram a tabela produto.
Verifique que o estoque dos produtos foi corretamente reduzido, de acordo com as quantidades "vendidas". Agora, para testar o trigger da exclusão, será removido o produto 1 dos itens vendidos. Com isso, o seu estoque deve ser alterado para o valor inicial, ou seja, 21.
DELETE FROM itensvenda WHERE id_venda=1 and cod_produto=1 ;
ATENÇÃO: Desta forma, a gente tá excluindo o registro que contém o id_venda igual 1 e cod_produto igual 1.
Vamos fazer um select na tabela itensvenda pra verificar se o registro com id_venda igual a 1 e cod_produto igual 1 foi deletado: select * from itensvenda;
Agora, vamos fazer um select na tabela produtos para verificar se o item deletado na tabela itensvenda foi retornado com sucesso no estoque. Resumindo: tinha 21 unidades no estoque, vendemos 3 unidades e ficou 18. O cliente liga e fala que não quer mais aquele produto, então, o produto é deletado do pedido. Com isso, o nosso estoque passa a ter 21 unidades daquele produto novamente.
select * from produtos;
Fonte: https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
Comentários
Postar um comentário