MySQL APÓS DELETE Trigger

Resumo : neste tutorial você aprenderá como criar uma AFTER DELETEtrigger MySQL para manter uma tabela resumo de outra tabela.

Introdução aos gatilhos MySQL AFTER DELETE

AFTER DELETE  Os gatilhos do MySQL são invocados automaticamente após a ocorrência de um evento de exclusão na tabela.

Aqui está a sintaxe básica para criar um AFTER DELETEgatilho MySQL:

CREATE TRIGGER trigger_name
    AFTER DELETE
    ON table_name FOR EACH ROW
trigger_body;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

Primeiro, especifique o nome do gatilho que deseja criar na CREATE TRIGGERcláusula.

Segundo, use AFTER DELETEa cláusula para especificar o horário para invocar o gatilho.

Terceiro, especifique o nome da tabela à qual o gatilho está associado, após a ONpalavra-chave.

Finalmente, especifique o corpo do gatilho que contém uma ou mais instruções que são executadas quando o gatilho é invocado.

Se você tiver várias instruções no trigger_body, precisará usar o BEGIN ENDbloco para envolvê-las e inverter o delimitador padrão entre $$e ;conforme mostrado a seguir:

DELIMITER $$

CREATE TRIGGER trigger_name
    AFTER DELETE
    ON table_name FOR EACH ROW
BEGIN
    -- statements
END$$    

DELIMITER ;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Em um AFTER DELETEgatilho, você pode acessar a OLDlinha, mas não pode alterá-la.

Observe que não há NEWlinha no AFTER DELETEgatilho.

MySQL APÓS DELETE Trigger

Exemplo de gatilho MySQL AFTER DELETE

Considere o seguinte AFTER DELETEexemplo de gatilho.

Configurando uma tabela de exemplo

Primeiro, crie uma nova tabela chamada Salaries:

DROP TABLE IF EXISTS Salaries;

CREATE TABLE Salaries (
    employeeNumber INT PRIMARY KEY,
    salary DECIMAL(10,2) NOT NULL DEFAULT 0
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira algumas linhas na Salariestabela:

INSERT INTO Salaries(employeeNumber,salary)
VALUES
    (1002,5000),
    (1056,7000),
    (1076,8000);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, crie outra tabela chamada SalaryBudgetsque armazena o total de salários da Salariestabela:

DROP TABLE IF EXISTS SalaryBudgets;

CREATE TABLE SalaryBudgets(
    total DECIMAL(15,2) NOT NULL
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, use a SUM()função para obter o salário total da Salariestabela e insira-o na SalaryBudgetstabela:

INSERT INTO SalaryBudgets(total)
SELECT SUM(salary) 
FROM Salaries;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, consulte os dados da SalaryBudgetstabela:

SELECT * FROM SalaryBudgets;        Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Criando exemplo de gatilho AFTER DELETE

O AFTER DELETEgatilho a seguir atualiza o salário total na SalaryBudgetstabela depois que uma linha é excluída da Salariestabela:

CREATE TRIGGER after_salaries_delete
AFTER DELETE
ON Salaries FOR EACH ROW
UPDATE SalaryBudgets 
SET total = total - old.salary;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste gatilho:

Primeiro, o nome do gatilho é after_salaries_deleteespecificado na CREATE TRIGGERcláusula:

CREATE TRIGGER after_salaries_deleteLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Em segundo lugar, o evento desencadeador é:

AFTER DELETELinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, a tabela à qual o gatilho está associado é a Salariestabela:

ON Salaries FOR EACH ROWLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, dentro do corpo do gatilho, subtraímos o salário excluído do salário total.

Testando o gatilho MySQL AFTER DELETE

Primeiro, exclua uma linha da tabela Salários:

DELETE FROM Salaries
WHERE employeeNumber = 1002;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, consulte o salário total na tabela SalaryBudgets:

SELECT * FROM SalaryBudgets;    Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como você pode ver na saída, o total é reduzido pelo salário excluído.

Terceiro, exclua todas as linhas da tabela de salários:

DELETE FROM Salaries;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, consulte o total da tabela SalaryBudgets:

SELECT * FROM SalaryBudgets;    Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O gatilho atualizou o total para zero.

Neste tutorial, você aprendeu como criar um AFTER DELETEgatilho MySQL para manter uma tabela de resumo de outra tabela.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *