Resumo : neste tutorial você aprenderá como criar uma AFTER DELETE
trigger 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 DELETE
gatilho 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 TRIGGER
cláusula.
Segundo, use AFTER DELETE
a 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 ON
palavra-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 END
bloco 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 DELETE
gatilho, você pode acessar a OLD
linha, mas não pode alterá-la.
Observe que não há NEW
linha no AFTER DELETE
gatilho.
Exemplo de gatilho MySQL AFTER DELETE
Considere o seguinte AFTER DELETE
exemplo 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 Salaries
tabela:
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 SalaryBudgets
que armazena o total de salários da Salaries
tabela:
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 Salaries
tabela e insira-o na SalaryBudgets
tabela:
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 SalaryBudgets
tabela:
SELECT * FROM SalaryBudgets;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Criando exemplo de gatilho AFTER DELETE
O AFTER DELETE
gatilho a seguir atualiza o salário total na SalaryBudgets
tabela depois que uma linha é excluída da Salaries
tabela:
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_delete
especificado na CREATE TRIGGER
cláusula:
CREATE TRIGGER after_salaries_delete
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em segundo lugar, o evento desencadeador é:
AFTER DELETE
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, a tabela à qual o gatilho está associado é a Salaries
tabela:
ON Salaries FOR EACH ROW
Linguagem 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 DELETE
gatilho MySQL para manter uma tabela de resumo de outra tabela.