Como consigo criar uma trigger para salvar dados antigos em uma tabela, após a tabela principal receber updates?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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!