Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MySQL] Insert si la ligne d'Update n'existe pas

Une histoire de Trigger

    30 mai 2011 à 16:22:38

    Bonjour à tous,

    Alors voilà mon problème (en simplifié).
    J'ai une table 'Voiture' qui comprend les champs suivants : 'idVoiture', 'idMarque', 'nom' et 'poids'.

    A partir d'une requête qui mets à jour le poids d'une voiture en fonction de sa marque et de son nom, je voudrais être sûr que la voiture existe et sinon la créer.

    En SQL, ça donne quelque chose comme ça :
    UPDATE Voiture SET poids=1000 
    WHERE idMarque=1 AND nom="Clio";
    


    J'ai donc essayer de faire un Trigger, mais il semblerait qu'il ne passe pas dedans lorsque il ne trouve aucun champs à modifier... Ou alors c'est mon code qui est foireux. Bref, je ne serais pas contre un petit coup de main si quelqu'un a une idée !
    DELIMITER |
    CREATE TRIGGER test BEFORE UPDATE ON Voiture
    FOR EACH ROW BEGIN
    DECLARE x INT;
    SET x = (SELECT COUNT(*) FROM Voiture WHERE nom=NEW.nom AND idMarque=NEW.idMarque);
    INSERT INTO TMP VALUES (x);
    IF x < 1 THEN 
    	INSERT INTO Voiture(idMarque, nom, poids) VALUES (NEW.idMarque, NEW.nom, NEW.poids);		
    END IF;
    END|
    

    Bien entendu, rien ne s'écrit dans ma table 'TMP' si la Clio n'existe pas.

    Merci d'avance pour votre aide. :)
    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2011 à 16:25:13

      Pourquoi faire un trigger pour ça ?? Tu mets un index UNIQUE sur (Voiture.idMarque, Voiture.nom).

      Ensuite, tu fais

      INSERT INTO Voiture (idMarque, nom, poids) 
      VALUES (1, 'Clio', 1000) 
      ON DUPLICATE KEY UPDATE 
      SET poids = 1000;
      
      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2011 à 16:30:50

        Argh ! Pourquoi faire simple quand on ne peut faire compliqué pas vrai...

        En fait, je ne savais pas qu'on pouvait créer des index uniques sur plusieurs champs... Un truc tout bête en somme.

        Merci beaucoup pour ton aide ! Je teste ça de suite.

        EDIT : Je ne peux pas marquer mon problème comme résolu en éditant, et je ne peux pas me répondre, mais ça fonctionne !
        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2011 à 16:42:41

          Nickel alors !

          Je savais pas qu'on pouvais pas résoudre si on était le dernier à avoir répondu.
          • Partager sur Facebook
          • Partager sur Twitter

          [MySQL] Insert si la ligne d'Update n'existe pas

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown