MySQL APÓS ATUALIZAÇÃO do gatilho

Resumo : neste tutorial, você aprenderá como criar um AFTER UPDATEgatilho MySQL para registrar as alterações feitas em uma tabela.

Introdução aos gatilhos MySQL AFTER UPDATE

AFTER UPDATE Os gatilhos MySQL são invocados automaticamente após a ocorrência de um evento de atualização na tabela associada aos gatilhos.

O seguinte mostra a sintaxe de criação de um AFTER UPDATEgatilho MySQL:

CREATE TRIGGER trigger_name
AFTER UPDATE
ON table_name FOR EACH ROW
trigger_bodyLinguagem 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 UPDATEa cláusula para especificar o horário para invocar o gatilho.

Terceiro, especifique o nome da tabela à qual o gatilho pertence após a ONpalavra-chave. O FOR EACH ROWinstrui o gatilho a disparar cada vez que uma linha é atualizada.

Finalmente, defina o corpo do gatilho que consiste em uma ou mais instruções.

Se o corpo do gatilho tiver mais de uma instrução, você precisará usar o BEGIN ENDbloco. E você também precisa alterar o delimitador padrão conforme mostrado no código a seguir:

DELIMITER $$

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

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

Em um AFTER UPDATEgatilho, você pode acessar linhas OLDe NEW, mas não pode atualizá-las.

Observe que the OLDrepresenta os valores das colunas antes de the UPDATE, enquanto the NEWrepresenta os valores das colunas depois de UPDATE.

MySQL APÓS ATUALIZAÇÃO do gatilho

Exemplo de gatilho MySQL AFTER UPDATE

Vejamos um exemplo de criação de um AFTER UPDATEgatilho.

Configurando uma tabela de exemplo

Primeiro, crie uma tabela chamada Sales:

DROP TABLE IF EXISTS Sales;

CREATE TABLE Sales (
    id INT AUTO_INCREMENT,
    product VARCHAR(100) NOT NULL,
    quantity INT NOT NULL DEFAULT 0,
    fiscalYear SMALLINT NOT NULL,
    fiscalMonth TINYINT NOT NULL,
    CHECK(fiscalMonth >= 1 AND fiscalMonth <= 12),
    CHECK(fiscalYear BETWEEN 2000 and 2050),
    CHECK (quantity >=0),
    UNIQUE(product, fiscalYear, fiscalMonth),
    PRIMARY KEY(id)
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira dados de amostra na Salestabela:

INSERT INTO Sales(product, quantity, fiscalYear, fiscalMonth)
VALUES
    ('2001 Ferrari Enzo',140, 2021,1),
    ('1998 Chrysler Plymouth Prowler', 110,2021,1),
    ('1913 Ford Model T Speedster', 120,2021,1);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, consulte os dados da Salestabela para exibir seu conteúdo:

SELECT * FROM Sales;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Gatilho MySQL AFTER UPDATE - tabela de exemplo

Por fim, crie uma tabela que armazene as alterações na quantitcoluna y da salestabela:

DROP TABLE IF EXISTS SalesChanges;

CREATE TABLE SalesChanges (
    id INT AUTO_INCREMENT PRIMARY KEY,
    salesId INT,
    beforeQuantity INT,
    afterQuantity INT,
    changedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

AFTER UPDATEExemplo de criação de gatilho

A instrução a seguir cria um AFTER UPDATEgatilho na salestabela:

DELIMITER $$

CREATE TRIGGER after_sales_update
AFTER UPDATE
ON sales FOR EACH ROW
BEGIN
    IF OLD.quantity <> new.quantity THEN
        INSERT INTO SalesChanges(salesId,beforeQuantity, afterQuantity)
        VALUES(old.id, old.quantity, new.quantity);
    END IF;
END$$

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

Este after_sales_updategatilho é disparado automaticamente antes que ocorra um evento de atualização para cada linha da salestabela.

Se você atualizar o valor na quantitycoluna para um novo valor, o gatilho insere uma nova linha para registrar as alterações na SalesChangestabela.

Vamos examinar o gatilho em detalhes:

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

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

Em segundo lugar, o evento desencadeador é:

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

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

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

Por fim, use a IF-THENinstrução dentro do corpo do gatilho para verificar se o novo valor não é igual ao antigo e, em seguida, insira as alterações na SalesChangestabela:

IF OLD.quantity <> new.quantity THEN
    INSERT INTO SalesChanges(salesId,beforeQuantity, afterQuantity)
    VALUES(old.id, old.quantity, new.quantity);
END IF;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Testando o gatilho MySQL AFTER UPDATE

Primeiro, atualize a quantidade da linha com id 1 para 350:

UPDATE Sales 
SET quantity = 350
WHERE id = 1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O after_sales_updatefoi invocado automaticamente.

Segundo, consulte os dados da SalesChangestabela:

SELECT * FROM SalesChanges;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Gatilho MySQL AFTER UPDATE - exemplo

Terceiro, aumente a quantidade de vendas de todas as linhas para 10%:

UPDATE Sales 
SET quantity = CAST(quantity * 1.1 AS UNSIGNED);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, consulte os dados da SalesChangestabela:

SELECT * FROM SalesChanges;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo 2 do gatilho MySQL AFTER UPDATE

O gatilho disparou três vezes devido às atualizações das três linhas.

Neste tutorial, você aprendeu como criar um AFTER UPDATEgatilho MySQL para validar dados antes de serem atualizados em uma tabela.

Deixe um comentário

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