Menu

{MySQL} Trigger BEFORE update [Résolu/Fermé]

Messages postés
6
Date d'inscription
lundi 13 juillet 2009
Dernière intervention
31 août 2009
- - Dernière réponse : vladp
Messages postés
6
Date d'inscription
lundi 13 juillet 2009
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)
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Dernière intervention
8 septembre 2011
1
Merci
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`)

Merci imw 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM a aidé 32820 internautes ce mois-ci

Messages postés
6
Date d'inscription
lundi 13 juillet 2009
Dernière intervention
31 août 2009
0
Merci
Merci beaucoup IMW... Cela fonctionne a merveille!!!
Messages postés
6
Date d'inscription
lundi 13 juillet 2009
Dernière intervention
31 août 2009
0
Merci
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
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Dernière intervention
8 septembre 2011
0
Merci
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
Messages postés
6
Date d'inscription
lundi 13 juillet 2009
Dernière intervention
31 août 2009
0
Merci
J'avais lu la doc mais le problème était au niveau du délmiteur.

Merci!!!
Edward G. Robinson | Those Who Kill | 150GB ebooks, mp3, videos and games free download!