2010-04-19 6 views
1

J'ai un script de migration qui lit à partir d'un DB et écrit dans un second DB.log mises à jour mysql

Je mets généralement à jour les enregistrements existants. Comment puis-je enregistrer les mises à jour comme:

productID : 125 
title : Product1 => test update 
price : 125 => 140 

Cela signifie que le productID 125 avait le titre « Produits1 » et est devenu « test » après la mise à jour et avait prix « 125 » qui est devenu « 140 »

Une pensée est de lire l'enregistrement garder les valeurs et ensuite mettre à jour, relire les valeurs et les champs de comparaison et de notation ce que nécessaire.

Existe-t-il d'autres méthodes?

Répondre

2

Vous pouvez utiliser un déclencheur et stocker les modifications dans une autre table.

Du haut de ma tête (ce qui suit suppose que productId ne sera jamais mis à jour);

create table main (
    `id` int not null auto_increment, 
    `title` varchar(30) not null, 
    `price` float not null, 
    primary key(`id`) 
); 

create table logger (
    `id` int not null auto_increment, 
    `productId` int not null, 
    `from_title` varchar(30) not null, 
    `to_title` varchar(30) not null, 
    `from_price` float not null, 
    `to_price` float not null, 
    primary key(`id`) 
); 

delimiter // 
create trigger my_logger before update on main 
begin 
    insert into 
     logger 
    set 
     `productId`=OLD.`id`, 
     `from_title`=OLD.`title`, 
     `to_title`=NEW.`title`, 
     `from_price`=OLD.`price`, 
     `to_price`=NEW.`title`; 
end;// 
delimiter ;