Resumo : neste tutorial, você aprenderá como criar um BEFORE DELETE
gatilho MySQL para adicionar linhas excluídas em uma tabela de arquivo.
Introdução aos gatilhos MySQL BEFORE DELETE
BEFORE DELETE
Os gatilhos do MySQL são acionados automaticamente antes que um evento de exclusão ocorra em uma tabela.
Aqui está a sintaxe básica para criar um BEFORE DELETE
gatilho MySQL:
CREATE TRIGGER trigger_name
BEFORE 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 após as CREATE TRIGGER
palavras-chave.
Segundo, use BEFORE DELETE
a cláusula para especificar que o gatilho é invocado logo antes de um evento de exclusão.
Terceiro, especifique o nome da tabela à qual o gatilho está associado após a ON
palavra-chave.
Por fim, especifique o corpo do gatilho que consiste em uma ou mais instruções executadas quando o gatilho é disparado.
Observe que se você tiver várias instruções no trigger_body
, precisará usar o BEGIN END
bloco para agrupar essas instruções e alterar temporariamente o delimitador padrão da seguinte maneira:
DELIMITER $$
CREATE TRIGGER trigger_name
BEFORE DELETE
ON table_name FOR EACH ROW
BEGIN
-- statements
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em um BEFORE DELETE
gatilho, você pode acessar a OLD
linha, mas não pode atualizá-la. Além disso, não há NEW
linha no BEFORE DELETE
gatilho.
BEFORE DELETE
Exemplo de gatilho MySQL
Vejamos o seguinte BEFORE DELETE
exemplo de gatilho.
Configurando uma tabela de exemplo
Primeiro, crie uma nova tabela chamada Salaries
que armazena as informações salariais dos funcionários
DROP TABLE IF EXISTS Salaries;
CREATE TABLE Salaries (
employeeNumber INT PRIMARY KEY,
validFrom DATE NOT NULL,
amount DEC(12 , 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,validFrom,amount)
VALUES
(1002,'2000-01-01',50000),
(1056,'2000-01-01',60000),
(1076,'2000-01-01',70000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, crie uma tabela que armazene o salário excluído:
DROP TABLE IF EXISTS SalaryArchives;
CREATE TABLE SalaryArchives (
id INT PRIMARY KEY AUTO_INCREMENT,
employeeNumber INT PRIMARY KEY,
validFrom DATE NOT NULL,
amount DEC(12 , 2 ) NOT NULL DEFAULT 0,
deletedAt TIMESTAMP DEFAULT NOW()
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
BEFORE DELETE
Exemplo de criação de gatilho
O BEFORE DELETE
gatilho a seguir insere uma nova linha na SalaryArchives
tabela antes que uma linha da Salaries
tabela seja excluída.
DELIMITER $$
CREATE TRIGGER before_salaries_delete
BEFORE DELETE
ON salaries FOR EACH ROW
BEGIN
INSERT INTO SalaryArchives(employeeNumber,validFrom,amount)
VALUES(OLD.employeeNumber,OLD.validFrom,OLD.amount);
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste gatilho:
Primeiro, o nome do gatilho é before_salaries_delete
especificado na CREATE TRIGGER
cláusula:
CREATE TRIGGER before_salaries_delete
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em segundo lugar, o evento desencadeador é:
BEFORE 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 )
Finalmente, dentro do corpo do gatilho, insira uma linha excluída na SalaryArchives
tabela.
Testando o BEFORE DELETE
gatilho MySQL
Primeiro, exclua uma linha da Salaries
tabela:
DELETE FROM salaries
WHERE employeeNumber = 1002;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, consulte os dados da SalaryArchives
tabela:
SELECT * FROM SalaryArchives;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O gatilho foi invocado e inseriu uma nova linha na SalaryArchives
tabela.
Terceiro, exclua todas as linhas da tabela Salários:
DELETE FROM salaries;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por fim, consulte os dados da SalaryArchives
tabela:
SELECT * FROM SalaryArchives;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O gatilho foi acionado duas vezes porque a DELETE
instrução excluiu duas linhas da Salaries
tabela.
Neste tutorial, você aprendeu como criar um BEFORE DELETE
gatilho MySQL para adicionar linhas excluídas em uma tabela de arquivo.