Como consigo criar uma trigger para salvar dados antigos em uma tabela, após a tabela principal receber updates?
Como consigo criar uma trigger para salvar dados antigos em uma tabela, após a tabela principal receber updates?
Oii Juliana, como você está?
Peço desculpas pela demora em obter um retorno.
Supondo que o banco utilizado seja o MySQL, uma opção de obter este resultado é criar a uma TRIGGER com o AFTER UPDATE que irá realizar um INSERT na tabela dados_antigos
, sempre que houver um UPDATE na tabela principal
. Através da cláusula OLD
, capturamos os registros que serão modificados. A seguir um exemplo:
delimiter //
CREATE TRIGGER insert_dados_antigos AFTER UPDATE ON principal
FOR EACH ROW
BEGIN
INSERT INTO dados_antigos(nome, idade)
VALUES (OLD.nome, OLD.idade);
END;
//
Caso queira testar todo o código, deixo abaixo o script utilizado:
-- Criando tabelas
CREATE TABLE principal(
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(50) ,
idade INT
);
CREATE TABLE dados_antigos(
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(50) ,
idade INT
);
-- Inserção dos dados
INSERT INTO principal(nome, idade) VALUES ("Nádia", 19);
INSERT INTO principal(nome, idade) VALUES ("Danielle", 20);
INSERT INTO principal(nome, idade) VALUES ("Beatriz", 22);
INSERT INTO principal(nome, idade) VALUES ("Oliver", 34);
-- Seleção dos dados
SELECT * FROM principal;
SELECT * FROM dados_antigos;
-- Criação do TRIGGER
delimiter //
CREATE TRIGGER insert_dados_antigos AFTER UPDATE ON principal
FOR EACH ROW
BEGIN
INSERT INTO dados_antigos(nome, idade)
VALUES (OLD.nome, OLD.idade);
END;
//
-- Realizando UPDATE
UPDATE principal
SET idade = 22
WHERE id = 1;
-- Seleção dos dados
SELECT * FROM principal;
SELECT * FROM dados_antigos;
Qualquer dúvida fico à disposição.
Abraços e bons estudos!