Partage
  • Partager sur Facebook
  • Partager sur Twitter

Altération d'une table

Ajout/Suppréssion

Sujet résolu
    21 février 2017 à 16:01:03

    Peut-on voir le script complet de création de ta base ? si tu peux poster un dump SQL.

    La requête citée a-t-elle été exécutée sans erreur ?

    • Partager sur Facebook
    • Partager sur Twitter
    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
      21 février 2017 à 16:29:14

      Voila un script :

      #------------------------------------------------------------
      #        Script MySQL.
      #------------------------------------------------------------
      
      
      #------------------------------------------------------------
      # Table: Utilisateur
      #------------------------------------------------------------
      
      CREATE TABLE Utilisateur(
              id_utilisateur int (11) Auto_increment  NOT NULL ,
              nom            Varchar (25) NOT NULL ,
              prenom         Varchar (25) NOT NULL ,
              PRIMARY KEY (id_utilisateur )
      )ENGINE=InnoDB;
      
      
      #------------------------------------------------------------
      # Table: Projet 
      #------------------------------------------------------------
      
      CREATE TABLE Projet(
              id_projet        smallint (6) Auto_increment  NOT NULL ,
              nom              Varchar (25) NOT NULL ,
              date_de_creation Date NOT NULL ,
              Statut           Bool ,
              id_utilisateur   Int NOT NULL ,
              PRIMARY KEY (id_projet )
      )ENGINE=InnoDB;
      
      
      #------------------------------------------------------------
      # Table: étape
      #------------------------------------------------------------
      
      CREATE TABLE etape(
              id_etape    int (11) Auto_increment  NOT NULL ,
              date_debut  Date ,
              date_fin    Date ,
              id_projet   Int NOT NULL ,
              id_activite Int NOT NULL ,
              PRIMARY KEY (id_etape )
      )ENGINE=InnoDB;
      
      
      #------------------------------------------------------------
      # Table: Activité
      #------------------------------------------------------------
      
      CREATE TABLE Activite(
              id_activite int (11) Auto_increment  NOT NULL ,
              libelle     Varchar (25) NOT NULL ,
              PRIMARY KEY (id_activite )
      )ENGINE=InnoDB;
      
      
      #------------------------------------------------------------
      # Table: charge
      #------------------------------------------------------------
      
      CREATE TABLE charge(
              id_charge int (11) Auto_increment  NOT NULL ,
              annee     Smallint NOT NULL ,
              id_etape  Int NOT NULL ,
              PRIMARY KEY (id_charge )
      )ENGINE=InnoDB;
      
      ALTER TABLE projet ADD CONSTRAINT FK_projet_id_utilisateur FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur(id_utilisateur);
      ALTER TABLE etape ADD CONSTRAINT FK_etape_id_projet FOREIGN KEY (id_projet) REFERENCES Projet(id_projet);
      ALTER TABLE etape ADD CONSTRAINT FK_etape_id_activite FOREIGN KEY (id_activite) REFERENCES activite(id_activite);
      ALTER TABLE charge ADD CONSTRAINT FK_charge_id_etape FOREIGN KEY (id_etape) REFERENCES etape(id_etape);
      

      Aucune erreur lorsque j'exécute la requête :



      -
      Edité par DimitriNeker1 21 février 2017 à 16:30:10

      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2017 à 16:31:13

        Du coup quelle requête exécutes-tu et qui devrais retourner une erreur de clé étrangère ?
        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          21 février 2017 à 16:44:08

          Celle ci :

          UPDATE `etape` SET `id_activite` = '15' WHERE `etape`.`id_etape` = 2; 

          J'utilise la requête directement depuis phpMyAdmin.

          • Partager sur Facebook
          • Partager sur Twitter
            21 février 2017 à 16:57:56

            Si tu fais :

            SELECT *
            FROM Activite
            WHERE id_activite = 15;

            Que tu retournes la requête ?

            Si tu fais :

            SELECT @@foreign_key_checks;

            Que tu retournes la requête ?

            Au passage, l'id_activité est un champ INT, je ne pense pas que cela soit le problème mais il est plus correct de faire :

            UPDATE `etape` SET `id_activite` = 15 WHERE `etape`.`id_etape` = 2;

            -
            Edité par Benzouye 21 février 2017 à 16:59:00

            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              21 février 2017 à 17:06:44

              Intéressant

              Alors si j’exécute la première requête rien ne change, ce qui est surprenant c'est que la deuxième requête ne retourne aucune erreur :

               MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0010 secondes.)
              
              
              
              
              SELECT * FROM Activite WHERE id_activite = 15


              La requête suivante me retourne :

              • Partager sur Facebook
              • Partager sur Twitter
                21 février 2017 à 17:24:39

                Wow ...

                Peux-tu poster le résultat de cette requête :

                UPDATE `etape` SET `id_activite` = 15 WHERE `etape`.`id_etape` = 2;

                Et confirmer qu'il y a bien écris 15 pour l'activité de l'étape 2.

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  21 février 2017 à 17:54:22

                  Le résultat de la requête : 

                  UPDATE `etape` SET `id_activite` = '2' WHERE `etape`.`id_etape` = 2


                  et la confirmation :euh: :

                  Edit: voila ma table activité qui ne contient pas 15 activités

                  -
                  Edité par DimitriNeker1 21 février 2017 à 17:56:29

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 février 2017 à 18:00:29

                    Bon ... tu as épuisé mon savoir ... je n'ai plus d'idée ...

                    Les contraintes de clés étrangères paraissent bien activées ... mais ne sont pas respectées ... je sèche désolé ...

                    En espérant que quelqu'un passe par là ... Peut-être serait-il plus judicieux de créer un nouveau sujet juste pour ce problème, en y reprenant les tests effectués ...

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      22 février 2017 à 9:41:02

                      Très bien je vais d'abord supprimer la BDD puis la récréer pour voir, si ça ne marche toujours pas j'ouvrirai un nouveau sujet.

                       Merci

                      Edit : ça marche :)

                      Après l'avoir recréé les contraintes sont respectés  ( directement depuis phpMyadmin lors de l'insertion je n'ai le choix d'attribuer que les id référencés ). Je pense que j'ai du mal définir les requêtes ( notamment avec la présence d'accent ou d'espace sur les id ).  

                      -
                      Edité par DimitriNeker1 22 février 2017 à 10:31:47

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 mars 2017 à 10:29:36

                        Je vous remercie de votre aide j'ai compléter ma première partie.

                        Merci encore, je ferme le sujet. 

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Altération d'une table

                        × 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