A Sniper's War | The Wishing Tree (2017) HDRip | Ana Coto
Menu

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

vladp 6 Messages postés lundi 13 juillet 2009Date d'inscription 31 août 2009 Dernière intervention - 5 août 2009 à 14:56 - Dernière réponse : vladp 6 Messages postés lundi 13 juillet 2009Date d'inscription 31 août 2009 Dernière intervention
- 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
imw 233 Messages postés vendredi 17 juillet 2009Date d'inscription 8 septembre 2011 Dernière intervention - 6 août 2009 à 11:07
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 25027 internautes ce mois-ci

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

Merci!!!