MySQL Trigger enregistrant les modifications d'une table

MySQL Trigger enregistrant les modifications d'une table - SQL/NoSQL - Programmation

Marsh Posté le 01-08-2008 à 10:00:57    

Bonjour, j'ai besoin d'un trigger qui enregistre a chaque modifications de la table la nouvelle ligne dans une autre table ayant le meme schema.
J'ai fait qqc du genre:
 
CREATE TRIGGER MODIFICATIONS
AFTER UPDATE ON maTable
FOR EACH ROW
BEGIN
    IF OLD.colonne1!=NEW.colonne1 or OLD.colonne2!=NEW.colonne2 ... then
        INSERT INTO maTable_modif(colonne1,colonne2,...,modification_date) values (value1,value2,...,NOW());
    END IF;
END
 
J'arrive pas a compiler ce trigger. Apparement un probleme de syntaxe mais je vois pas ou. J'ai cherché sur le web et je trouve la meme syntaxe
 
Sinon, est ce que ce trigger va aussi prendre en compte les insertions dans la table ou juste les modif de lignes existantes. Si oui, faut il que je recopie ce trigger en
 
CREATE TRIGGER MODIFICATIONS
AFTER INSERT ON maTable
FOR EACH ROW
BEGIN
        INSERT INTO maTable_modif(colonne1,colonne2,...,modification_date) values (value1,value2,...,NOW());
END
 
ce qui ne compile pas non plus
 
Merci pour l'aide


---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 01-08-2008 à 10:00:57   

Reply

Marsh Posté le 01-08-2008 à 10:28:47    

"after update, insert" (ou "after update or insert" ) - à voir quelle syntaxe mysql supporte - devrait résoudre ta question numéro 2. dans le cas du insert, OLD ne doit contenir que des valeurs à null
 
ps : et si tu fais deux triggers, évite de les nommer pareil parceque sinon ça ne risque pas de compiler effectivement ;)
 
sinon c'est quoi le message d'erreur, ça sera plus facile pour répondre je pense


Message édité par MagicBuzz le 01-08-2008 à 10:30:09
Reply

Marsh Posté le 01-08-2008 à 10:43:28    

Oui evidement je ne les nommerai pas pareil  
sinon l'erreur est:
ER_PARSE_ERROR(1064)
You have an error in your SQL syntax; check the manual that corresponds to you MySQL server version for the right syntax to use near " at line 6
 
line 6 => insert query


---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 01-08-2008 à 10:46:03    

habituellement, y'a toujours des gens qui ont des soucis avec les triggers à cause d'un "escape_delimiter" ou une connerie comme ça.
 
me demande si c'est pas le ; qui fout la merde, à remplacer par autrechose.
 
faudrait qu'une personne qui joue avec mysql passe par là pour te répondre plus précisément :)

Reply

Marsh Posté le 01-08-2008 à 10:49:29    

je viens d'essayer toutes les combinaisons possibles avec les deux ; , pas de changement, impossible de compiler.
Ca manque de MySQL gurus ici ^^ en tout cas merci d'essayer
Pas d'autres idees?
qq d'autre eventuellement aurait la solution?


---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 01-08-2008 à 10:53:33    

donc c'est le mot clé "delimiter" qui indique quel délimiteur termine le trigger.
 
http://dev.mysql.com/doc/refman/5. [...] ggers.html
 
en fait, je pense que mysql est particulièrement abruti, et analyse la syntaxe de <debut d'instruction> à <premier délimiteur trouvé>
 
et du coup, par défaut, vu que c'est ";"
 
bah...
 
CREATE TRIGGER MODIFICATIONS  
AFTER UPDATE ON maTable  
FOR EACH ROW  
BEGIN  
    IF OLD.colonne1!=NEW.colonne1 or OLD.colonne2!=NEW.colonne2 ... then  
        INSERT INTO maTable_modif(colonne1,colonne2,...,modification_date) values (value1,value2,...,NOW())
 
n'est effectivement pas valide, il en manque la moitié.
 
y'a pas à tortiller, mysql c'est vraiment une belle merde :o

Reply

Marsh Posté le 01-08-2008 à 11:36:49    

MERCI
ca marche ^^


---------------
Toinou87 ;-p May the force be with you!!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed