{MySQL} Trigger BEFORE update

Résolu/Fermé
vladp Messages postés 6 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 31 août 2009 - 5 août 2009 à 14:56
vladp Messages postés 6 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 31 août 2009 - 6 août 2009 à 23:18
Bonjour a tous,

Mon problème est suivant: J'ai deux table (individu et historique), je veux creer un trigger qui avant chaque mise a jour dans la table individu recupere les valeurs actuelles et les inserent dans la la table historique. Mais mon probleme est que a chaque mise a jour le trigger insere toutes les valeurs de la table individu dans la table historique. Ci-dessous vous pourrez j'ai ajoute mon trigger pour toute assistance.

Merci deja pour vos reponses.

CREATE TRIGGER IND_UPDATE
BEFORE UPDATE ON `INDIVIDU`
FOR EACH ROW
INSERT INTO hist_individu (`ID_IND`, `EMPRINTE_IND`, `G_SANG_IND`, `SEXE_IND`, `NOM_IND`,  `NOM_JEUNE_FILLE`, `PRENOM_IND`, `DATE_NAIS`, `PHOTO`, `SIGNATURE_IND`, `RELIGION`, `NUM_NIF`, `DATE_EMISSION_NIF`, `DATE_EXPIRATION_NIF`, `LIEU_EMISSION_NIF`, `NUM_CIF`,         `DATE_EMISSION_CIF`, `DATE_EXPIRATION_CIF`, `LIEU_EMISSION_CIF`, `PROFESSION`, `NUM_PASSPORT`, `TYPE_PASS`, `LIEU_EMISSION_PASS`, `DATE_EMISSION_PASS`, `DATE_EXPIRATION_PASS`, `NUM_IDENTIFIANT_PERE`, `NUM_IDENTIFIANT_MERE`, `NUM_IDENTIFIANT_OEC`, `NATIONALITE_individu`, `EMAIL1`, `EMAIL2`, `DATE_CREATION_IND`, `LAST_DATE_MODIFICATION_IND`, `IND_CHAMP_CREE_PAR`, `LAST_IND_CHAMP_MODIFIER_PAR`)

 (SELECT `ID_IND`, `EMPRINTE_IND`, `G_SANG_IND`, `SEXE_IND`, `NOM_IND`, `NOM_JEUNE_FILLE`, `PRENOM_IND`, `DATE_NAIS`, `PHOTO`, `SIGNATURE_IND`, `RELIGION`, `NUM_NIF`, `DATE_EMISSION_NIF`, `DATE_EXPIRATION_NIF`, `LIEU_EMISSION_NIF`, `NUM_CIF`, `DATE_EMISSION_CIF`, `DATE_EXPIRATION_CIF`, `LIEU_EMISSION_CIF`, `PROFESSION`, `NUM_PASSPORT`, `TYPE_PASS`, `LIEU_EMISSION_PASS`, `DATE_EMISSION_PASS`, `DATE_EXPIRATION_PASS`, `NUM_IDENTIFIANT_PERE`, `NUM_IDENTIFIANT_MERE`, `NUM_IDENTIFIANT_OEC`, `NATIONALITE_individu`, `EMAIL1`, `EMAIL2`, `DATE_CREATION_CHAMP`, `DATE_MODIFICATION_CHAMP`, `CHAMP_CREE_PAR`, `CHAMP_MODIFIER_PAR` FROM INDIVIDU)
A voir également:

5 réponses

imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
6 août 2009 à 11:07
Normal !

la commande select n'a aucune condition WHERE, ce qui veux dire qu'elle récupère toutes les lignes.

Il faut rajouter

WHERE `ID_IND`=OLD.`ID_IND`


qui aura pour effet de ne sélectionner QUE la ligne doit l'ID_INT correspond à celui que tu update (OLD.`ID_IND`)
1
vladp Messages postés 6 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 31 août 2009
6 août 2009 à 16:29
Merci beaucoup IMW... Cela fonctionne a merveille!!!
0
vladp Messages postés 6 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 31 août 2009
6 août 2009 à 19:48
Autre question comment puis-je ajouter plusieur action a ce trigger?

Comme par exemple je veux mettre ajour le champ date_modification_champ dnas la table individu
0
imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
6 août 2009 à 21:42
Si tu lis la doc mysql, tu verra qu'il est possible après le FOR EACH ROW, d'utiliser la syntaxe

BEGIN
... code ...
END

pour insérer plusieurs commandes !
Attention au délimiteur ...

la doc :
http://dev.mysql.com/doc/refman/5.0/fr/create-trigger.html
http://dev.mysql.com/doc/refman/5.0/fr/begin-end.html
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vladp Messages postés 6 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 31 août 2009
6 août 2009 à 23:18
J'avais lu la doc mais le problème était au niveau du délmiteur.

Merci!!!
0