Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment interdire la création de doublons

Option Unique mais sur 2 champs associés...

Sujet résolu
    2 février 2023 à 10:23:15

    Bonjour j'ai une petite table nommée capteurs_inhibe avec

    une clé primaire,

    un champ Id_ruche (venant d'une autre table) et un

    champ capteur_inhibe (venant lui aussi d'une autre table ).

    Que je gère avec PhpMyAdmin sur Raspberry.

    Je souhaiterais au niveau de la structure interdire les doublons sur les 2 colonnes id_ruche et capteur_inhibé ..

    Actuellement j'ai 5 id_ruche et 3 capteur_inhibe je voudrais donc autoriser :

    les couples : (id_ruche - capteur_inhibe)

    1-1, 1-2, 1-3,

    2-1, 2-2, 2-3,

    3-1,3- 1,3- 2,3-3,

    4-1, 4-2, 4-3,

    5-1, 5-2, 5-3

    Mais une seule fois, ne pas avoir par exemple 2 fois le couple 1-2...

    Comment puis-je faire?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      4 février 2023 à 21:09:41

      Bonjour,

      J'ai testé avec une contrainte d'unicité et cela fonctionne :

      DROP TABLE IF EXISTS capteurs_inhibe;
      
      CREATE TABLE capteurs_inhibe (
      	ID_Inhib int PRIMARY KEY AUTO_INCREMENT NOT NULL,
      	id_ruche int,
      	Capteur_Inhibe int,
      	CONSTRAINT UNIQUE (id_ruche, Capteur_Inhibe)
      );
      
      INSERT INTO capteurs_inhibe (id_ruche, Capteur_Inhibe) VALUES
      (1, 1),
      (1, 2),
      (1, 3),
      (2, 1),
      (2, 2),
      (2, 3),
      (3, 1),
      (3, 2),
      (3, 3),
      (4, 1),
      (4, 2),
      (4, 3),
      (5, 1),
      (5, 2),
      (6, 3);
      
      INSERT INTO capteurs_inhibe (id_ruche, Capteur_Inhibe) VALUES
      (1, 1);

      La dernière instruction :

      INSERT INTO capteurs_inhibe (id_ruche, Capteur_Inhibe) VALUES
      (1, 2);

      Renvoit bien une erreur :

      SQL Error [1062] [23000]: (conn=22) Duplicate entry '1-1' for key 'id_ruche'

      Edit :

      Si ta table existe déjà et que tu ne veux pas la supprimer tu peux ajouter la contrainte manuellement en modifiant ta table :

      ALTER TABLE capteurs_inhibe ADD CONSTRAINT nom_contrainte UNIQUE(id_ruche, Capteur_Inhibe);

      Gadaa


      -
      Edité par Gadaa 4 février 2023 à 21:13:03

      • Partager sur Facebook
      • Partager sur Twitter
        5 février 2023 à 9:31:13

        Merci beaucoup je vais tester!

        Je suppose qu'on peut appliquer le même principe à plus de 2 champs?

        si par exemple je rajoute des dates dans ma table? Comparaison id_ruche, capteur_inhibé et date_Debut_...

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          5 février 2023 à 13:54:32

          Oui autant de champs que tu veux :)

          -
          Edité par Gadaa 5 février 2023 à 13:54:45

          • Partager sur Facebook
          • Partager sur Twitter

          Comment interdire la création de doublons

          × 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