{MySQL} Trigger BEFORE update

Résolu
vladp Messages postés 8 Statut Membre -  
vladp Messages postés 8 Statut Membre -
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 Statut Membre 42
 
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 8 Statut Membre
 
Merci beaucoup IMW... Cela fonctionne a merveille!!!
0
vladp Messages postés 8 Statut Membre
 
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 Statut Membre 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 8 Statut Membre
 
J'avais lu la doc mais le problème était au niveau du délmiteur.

Merci!!!
0