{MySQL} Trigger BEFORE update

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

Merci!!!
0