MySQL ANTES DE DELETE Trigger

Resumo : neste tutorial, você aprenderá como criar um BEFORE DELETEgatilho 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 DELETEgatilho 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 TRIGGERpalavras-chave.

Segundo, use BEFORE DELETEa 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 ONpalavra-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 ENDbloco 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 DELETEgatilho, você pode acessar a OLDlinha, mas não pode atualizá-la. Além disso, não há NEWlinha no BEFORE DELETEgatilho.

MySQL ANTES DE DELETE Trigger

BEFORE DELETEExemplo de gatilho MySQL

Vejamos o seguinte BEFORE DELETEexemplo de gatilho.

Configurando uma tabela de exemplo

Primeiro, crie uma nova tabela chamada Salariesque 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 Salariestabela:

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 DELETEExemplo de criação de gatilho

O BEFORE DELETEgatilho a seguir insere uma nova linha na SalaryArchivestabela antes que uma linha da Salariestabela 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_deleteespecificado na CREATE TRIGGERclá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 Salariestabela:

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 SalaryArchivestabela.

Testando o BEFORE DELETEgatilho MySQL

Primeiro, exclua uma linha da Salariestabela:

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

Segundo, consulte os dados da SalaryArchivestabela:

SELECT * FROM SalaryArchives;    
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo de gatilho MySQL BEFORE DELETE

O gatilho foi invocado e inseriu uma nova linha na SalaryArchivestabela.

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 SalaryArchivestabela:

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

O gatilho foi acionado duas vezes porque a DELETEinstrução excluiu duas linhas da Salariestabela.

Neste tutorial, você aprendeu como criar um BEFORE DELETEgatilho MySQL para adicionar linhas excluídas em uma tabela de arquivo.

Deixe um comentário

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