{MySQL} Trigger BEFORE update

Résolu
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)
Configuration: Windows XP Internet Explorer 7.0

5 réponses

  1. 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. 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
      1. 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
        1. J'avais lu la doc mais le problème était au niveau du délmiteur.

          Merci!!!