J'ai une table:En utilisant MySQL déclencheurs pour enregistrer tous les changements de table à une table secondaire
CREATE TABLE `data_table` (
`data_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`field1` INT NOT NULL ,
`field2` INT NOT NULL ,
`field3` INT NOT NULL
) ENGINE = MYISAM ;
je serais connecter pour connecter toutes les chances de FIELD1, 2 ou 3:
CREATE TABLE `data_tracking` (
`tracking_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data_id` INT NOT NULL ,
`field` VARCHAR(50) NOT NULL ,
`old_value` INT NOT NULL ,
`new_value` INT NOT NULL ,
`modified` DATETIME NOT NULL
) ENGINE = MYISAM ;
J'utilise MySQL 5, et je voudrais créer un déclencheur à faire. Je voudrais insérer une nouvelle ligne dans data_tracking chaque fois que data_table est mis à jour, et enregistrer l'ancienne/mise à jour, ainsi que le champ modifié. J'ai essayé ce qui suit sans succès.
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 set old_value = OLD.field1, new_value = NEW.field1, field = "field1";
END IF;
END$$
DELIMITER ;
Il a donné une erreur sur la ligne d'insertion, je ne suis pas tout à fait sûr de ce que la syntaxe sur ce devrait être, ou si je vais sur ce la bonne façon. Toute aide serait appréciée. Merci.
Je viens d'ajouter ma pensée sur le déclencheur –
Êtes-vous sûr que votre "data_table" a un champ nommé data_id? –
Oups, désolé, tu as raison, quand j'ai créé mes exemples de tables, j'en ai changé une à la dernière minute. Cela a fonctionné parfaitement. Désolé pour la confusion :( – Rob