Database
 sql >> Base de Dados >  >> RDS >> Database

O que são Triggers em SQL e como implementá-los?

Um gatilho em SQL é um código de procedimento que é executado automaticamente em resposta a determinados eventos em uma tabela especificada. É importante entender como esses pequenos códigos fazem uma grande diferença no desempenho do banco de dados. Neste artigo, você aprenderá como implementar gatilhos junto com exemplos.

Os seguintes tópicos serão abordados neste artigo:

  • O que é um gatilho?
  • Sintaxe e exemplo
  • Operação em gatilhos
  • Vantagem e Desvantagem

O que é um gatilho?

Triggers são os códigos SQL que são executados automaticamente em resposta a determinados eventos em uma tabela específica. Estes são usados ​​para manter a integridade dos dados. Um gatilho no SQL funciona de maneira semelhante a um gatilho do mundo real. Por exemplo, quando o gatilho da arma é puxado, uma bala é disparada. Todos nós sabemos disso, mas como isso está relacionado aos Triggers no SQL? Para entender isso, vamos considerar uma situação hipotética.


João é o diretor de marketing de uma empresa. Quando os dados de um novo cliente são inseridos no banco de dados da empresa, ele deve enviar a mensagem de boas-vindas a cada novo cliente. Se for um ou dois clientes o João pode fazer manualmente, mas e se a contagem for superior a mil? Bem, nesse cenário, os gatilhos são úteis.

Assim, agora John pode criar facilmente um gatilho que enviará automaticamente um e-mail de boas-vindas aos novos clientes assim que seus dados forem inseridos no banco de dados. Então, espero que você tenha entendido bem a introdução dos Triggers no SQL.

Lembre-se sempre de que não pode haver dois gatilhos com tempo de ação e evento semelhantes para uma tabela. Por exemplo, não podemos ter dois gatilhos BEFORE UPDATE para uma tabela. Mas podemos ter um ANTES DA ATUALIZAÇÃO e um ANTES DE INSERIR gatilho ou um ANTES DA ATUALIZAÇÃO e um APÓS ATUALIZAÇÃO acionar.

Antes de nos aprofundarmos nos fundamentos dos gatilhos, sugiro que você entenda os conceitos de SQL Basics e Normalização para que você tenha uma melhor compreensão dos gatilhos no SQL.

Sintaxe e exemplo

Vamos agora ver a sintaxe de um gatilho.

Create Trigger Trigger_Name
(Before | After)  [ Insert | Update | Delete]
on [Table_Name]
[ for each row | for each column ]
[ trigger_body ]

Agora deixe-me detalhar essa sintaxe e explicar cada parte em detalhes.

  • Criar acionador
    Essas duas palavras-chave são usadas para especificar que um bloco de gatilho será declarado.
  • Nome_do_gatilho
    Ele especifica o nome do gatilho. O nome do gatilho precisa ser exclusivo e não deve ser repetido.
  • ( Antes | Depois de )
    Isso especifica quando o gatilho será executado. Ele nos informa a hora em que o acionador é iniciado, ou seja, antes ou depois do evento em andamento.
  • Antes dos acionadores são usados ​​para atualizar ou validar valores de registro antes de serem salvos no banco de dados.
  • Depois dos acionadores são usados ​​para acessar valores de campo que são definidos pelo sistema e para efetuar alterações em outros registros. Os registros que ativam o acionador posterior são somente leitura. Não podemos usar o gatilho After se quisermos atualizar um registro porque isso levará a um erro somente leitura.
  • [ Inserir | Atualizar | Excluir ]
    Essas são as operações DML e podemos usar qualquer uma delas em um determinado gatilho.
  • em [ Nome_tabela ]
    Precisamos mencionar o nome da tabela na qual o gatilho está sendo aplicado. Não se esqueça de usar em palavra-chave e também verifique se a tabela selecionada está presente no banco de dados.
  • [ para cada linha | para cada coluna ]
    1. O gatilho em nível de linha é executado antes ou depois de qualquer valor de coluna de uma linha alterações
    2. O acionador de nível de coluna é executado antes ou depois da coluna especificada alterações
  • [ trigger_body]
    Consiste em consultas que precisam ser executadas quando o gatilho é chamado.

Então isso foi tudo sobre um simples gatilho. Mas também podemos criar um gatilho aninhado que pode fazer vários processos. Também é muito importante manuseá-lo e encerrá-lo no momento certo. Se não terminarmos o gatilho corretamente, isso pode levar a um loop infinito.

Você pode estar se perguntando em qual cenário podemos usar o gatilho aninhado. Em vez de lhe dar uma resposta personalizada, deixe-me compartilhar um cenário com você, que o ajudará a entender melhor o gatilho aninhado. Dando continuidade ao cenário anterior, John enviou um e-mail para cada novo cliente adicionado ao banco de dados da empresa. Agora, e se ele quiser acompanhar o número de clientes para os quais o e-mail foi enviado? Agora John precisa criar um gatilho aninhado para acompanhar a contagem junto com o envio de um email.

Então isso foi tudo sobre a sintaxe dos gatilhos, vamos agora tentar implementar um exemplo de gatilhos no SQL.

Exemplo de gatilho:

No gatilho abaixo, estamos tentando calcular a porcentagem do aluno assim que seus dados forem atualizados no banco de dados.

CREATE TRIGGER sample_trigger
before INSERT
ON student
FOR EACH ROW
SET new.total = new.marks/6;


Aqui o “NOVO” palavra-chave refere-se à linha que está sendo afetada.

Operações em gatilhos

Podemos realizar muitas operações usando gatilhos. Alguns podem ser simples e alguns podem ser um pouco complexos, mas uma vez que passamos pela consulta é fácil de entender.

  • SOLTE UM Acionador
DROP TRIGGER trigger name;
  • Exibir um gatilho

O código abaixo exibirá todos os gatilhos presentes.

SHOW TRIGGERS;

O código abaixo exibirá todos os gatilhos que estão presentes em um determinado banco de dados.
SHOW TRIGGERS
IN database_name;

Exemplo:
SHOW TRIGGERS IN edureka;

No exemplo acima, todos os gatilhos que estão presentes no banco de dados chamado Edureka serão exibidos.

Também analisamos algumas variantes principais dos gatilhos que são Antes de inserir e Depois de inserir. Já vimos um gatilho no exemplo. Mas com a ajuda da tabela vamos ver exatamente como isso funciona.

Como já entendemos como criar um gatilho, agora vamos entender as duas variantes do gatilho:Antes de inserir e Depois de inserir. para implementá-los, vamos criar uma tabela de alunos com várias colunas conforme mostrado abaixo:

CREATE TABLE Student(
studentID INT NOT NULL AUTO_INCREMENT,
FName VARCHAR(20),
LName VARCHAR(20),
Address VARCHAR(30),
City VARCHAR(15),
Marks INT,
PRIMARY KEY(studentID)
);

Agora, se executarmos essa consulta, obteremos a tabela a seguir.


Vamos tentar usar a primeira variante, ou seja, Antes de Inserir

CREATE TRIGGER calculate
before INSERT 
ON student
FOR EACH ROW
SET new.marks = new.marks+100;

Aqui, quando inserimos dados na tabela do aluno automaticamente, o gatilho será invocado. O acionador adicionará 100 à coluna de notas na coluna do aluno.

Agora vamos usar a segunda variante, ou seja, Depois Inserir

Para usar essa variante precisamos de mais uma tabela, ou seja, Porcentagem onde o gatilho armazenará os resultados. Use o código abaixo para criar a tabela de porcentagem.

create table Final_mark(
per int );

Agora vamos usar o gatilho after insert

CREATE TRIGGER total_mark
after insert 
ON student
FOR EACH ROW
insert into Final_mark values(new.marks);

Aqui quando inserimos dados na tabela, total_mark trigger armazenará o resultado na tabela Final_mark.

Isso foi tudo sobre a operação em gatilhos, vamos agora avançar e ver suas vantagens e desvantagens.

Vantagens e desvantagens dos gatilhos

Vantagens

  • Forçar a segurança aprovações na tabela que estão presentes no banco de dados
  • Os acionadores fornecem outra maneira de verificar a integridade dos dados
  • Compensação inválida trocas
  • Acionadores lidam com erros da camada de banco de dados
  • Normalmente, os acionadores podem ser úteis para inspecionar os dados alterações nas tabelas
  • Os acionadores oferecem uma maneira alternativa de executar starefas programadas . Usando gatilhos, não precisamos esperar que os eventos programados sejam executados porque os gatilhos são invocados automaticamente antes ou depois que uma alteração é feita nos dados em uma tabela

Desvantagem s

  • Os acionadores só podem fornecer validações estendidas , ou seja, nem todas as validações de tipo. Para validações simples, você pode usar as restrições NOT NULL, UNIQUE, CHECK e FOREIGN KEY
  • Os acionadores podem aumentar a sobrecarga do banco de dados
  • Os gatilhos podem ser difíceis de solucionar porque eles são executados automaticamente no banco de dados, o que pode não ser invisível para os aplicativos clientes

Isso nos leva ao final deste artigo Triggers in SQL. Espero que você tenha entendido os conceitos de Gatilhos.

Se você deseja aprender mais sobre o MySQL e conhecer este banco de dados relacional de código aberto, confira nosso Treinamento de Certificação MySQL DBA que vem com treinamento ao vivo conduzido por instrutor e -experiência de projeto de vida. Este treinamento irá ajudá-lo a entender o MySQL em profundidade e ajudá-lo a alcançar o domínio sobre o assunto.

Tem alguma pergunta para nós? Mencione-o na seção de comentários deste Triggers in SQL e entraremos em contato com você.