sql >> Database >  >> RDS >> Mysql

MySQL-triggers gebruiken om alle tabelwijzigingen in een secundaire tabel te loggen

De invoegsyntaxis is

INSERT INTO table (columns_list) VALUES (values_list)

dus je invoeging ziet er ongeveer zo uit (ik ben geen MySQL-expert, maar je kunt aan de vraag voldoen):

INSERT INTO data_tracking 
(`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
VALUES 
(NEW.data_id, 'field1', OLD.field, NEW.field, CURRENT_DATETIME());

En herhaal het voor variatie op veld2 en veld3

Ik denk dat dit de volledige trigger zou zijn, probeer a.u.b.:

DELIMITER $$

DROP TRIGGER `update_data `$$

CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
    IF (NEW.field1 != OLD.field1) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field1", OLD.field1, NEW.field1, NOW());
    END IF;
    IF (NEW.field2 != OLD.field2) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field2", OLD.field2, NEW.field2, NOW());
    END IF;
    IF (NEW.field3 != OLD.field3) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field3", OLD.field3, NEW.field3, NOW());
    END IF;
END$$

DELIMITER ;



  1. Awesome 24 Concurrent Manager Sollicitatievragen

  2. Oracle TNS-namen worden niet weergegeven bij het toevoegen van een nieuwe verbinding met SQL Developer

  3. MySQL controleren of er meerdere rijen bestaan

  4. Extraheer de maand van een datum in PostgreSQL