Partage
  • Partager sur Facebook
  • Partager sur Twitter

DROP UNIQUE INDEX ne fonctionne pas !?

Suppressions de doublons

    28 mars 2014 à 19:51:34

    Bonjour,

    j'ai trouvé cette solution sympathique sur le web pour supprimer des doublons dans une BDD Mysql...

    $link = mysql_query("ALTER IGNORE TABLE " . $table_eval_de_linscrit . " ADD UNIQUE INDEX(metier, entreprise, ville, prestation, departement)");

    Ça fonctionne et c'est rapide, petit problème lorsque j'essaie de retirer  le caractère unique voire l'index, voire les deux (pour revenir à une table "normale") en utilisant ce que j'ai aussi trouvé sur la toile :

    $link = mysql_query("ALTER TABLE " . $table_eval_de_linscrit . " DROP UNIQUE INDEX(metier, entreprise, ville, prestation, departement)");
    
    

    ou simplement UNIQUE ou INDEX ou un seul des champ (intitulé des colonnes) metier, ou entreprise ou ville ou prestation etc. etc. ça ne fonctionne pas...

    Quelqu'un a une idée parce que là, je cale ?

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      28 mars 2014 à 23:12:37

      Pas de message, il semble tout accepter sans rien dire... mais sans rien changer !
      • Partager sur Facebook
      • Partager sur Twitter
        29 mars 2014 à 6:43:07

        Il faut l'afficher, le message. Si tu ne le gère pas il n'apparaitra pas. Ce n'est pas une erreur PHP...
        • Partager sur Facebook
        • Partager sur Twitter
          29 mars 2014 à 8:19:44

          Oui la fatigue aidant, je ne fais plus attention, je finis par faire n'importe quoi...

           lorsque j'envoie la ligne de code que j'ai nommée avec unique, index unique  ou index l'erreur est toujours la même

          Erreur dans le script : ... à la Ligne 277
          Message MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNIQUE INDEX(metier, entreprise, ville, prestation, departement)' at line 1

          Ce qui ne nous apprend pas grand chose...

          Lorsque j'essaie cela

          $link = mysql_query("ALTER TABLE " . $table_eval_de_linscrit . " DROP INDEX metier");

          j'obtiens un message plus intéressant quoi que...

          Erreur dans le script :... à la Ligne 277
          Message MySQL : Can't DROP 'metier'; check that column/key exists.

          Je ne comprends pas bien ce que cela veut dire, je ne désire pas retirer la colonne metier mais seulement son caractère d'unicité...

          En comprends-tu davantage ?

          Je vais essayer d'autres choses...

          • Partager sur Facebook
          • Partager sur Twitter
            29 mars 2014 à 8:21:24

            un index, une clé, c'est pareil. As-tu essayé un DROP KEY par hasard ? J'ai pas été voir la doc avant de proposer ça, je précise... :-°
            • Partager sur Facebook
            • Partager sur Twitter
              29 mars 2014 à 8:27:25

              En remplaçant INDEX par UNIQUE , cela donne :

              Message MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNIQUE metier' at line 1

              ce qui n'est pas passionnant...

              avec la syntaxe conseillée par la ressource SGBD :

              $link = mysql_query("DROP UNIQUE metier ON TABLE " . $table_eval_de_linscrit)


              Message MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNIQUE metier ON TABLE tb_evals_de_linscrit_marcvart' at line 1

              • Partager sur Facebook
              • Partager sur Twitter
                29 mars 2014 à 8:28:40

                Je vais essayer de "droper" la clé mais quel rapport avec l'index  etson unicité ? Peux-tu m'expliquer ?
                • Partager sur Facebook
                • Partager sur Twitter
                  29 mars 2014 à 8:28:51


                  13.2.7. Syntaxe de DROP INDEX

                  DROP INDEX nom_de_l_index ON nom_de_table

                  DROP INDEX supprime l'index nommé nom_de_l_index de la table nom_de_table. DROP INDEX ne fait rien avec la version 3.22 et les précédentes. Depuis cette version, DROP INDEX est un alias d'ALTER TABLE supprimant l'index.

                  See Section 13.2.2, « Syntaxe de ALTER TABLE ».

                  -
                  Edité par christouphe 29 mars 2014 à 8:31:52

                  • Partager sur Facebook
                  • Partager sur Twitter
                  "K.I.S.S." Keep It Simple Stupid - Utilisez la Doc - Activer les Exceptions PDO - SQL Formes Normales
                    29 mars 2014 à 8:30:59

                    lorsque j'écris cela :

                    $link = mysql_query("ALTER TABLE " . $table_eval_de_linscrit . " DROP key metier")

                    l'erreur devient :

                    Message MySQL : Can't DROP 'metier'; check that column/key exists

                    ???

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 mars 2014 à 8:33:45

                      donc elle n'existe plus / pas.

                      tu as vérifié  avec PMA ?

                      ++

                      • Partager sur Facebook
                      • Partager sur Twitter
                      "K.I.S.S." Keep It Simple Stupid - Utilisez la Doc - Activer les Exceptions PDO - SQL Formes Normales
                        29 mars 2014 à 8:35:23

                        Oui j'avais déjà utilisé cette syntaxe et l'ai réutilisée sur tes conseils, ce qui donne

                        $link = mysql_query("DROP INDEX metier ON " .$table_eval_de_linscrit);

                        Message MySQL : Can't DROP 'metier'; check that column/key exists

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 mars 2014 à 8:37:19

                          Lorsque j'essaie de comprendre le message d'erreur, il semble me dire que la clé existe et que je dois vérifier la colonne, non ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 mars 2014 à 8:43:22

                            Pour essayer de t'en dire davanatage... sur cette table, il y a une clé primaire qui est id, à priori rien d'autre, hormis grisées les cases d'unicité de metier, entreprise, ville departement.

                            Ce sont ces cases grisées que je n'arrive pas à "dégriser", sans jeu de mots subtils...

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 mars 2014 à 8:44:10

                              Oui en SQL directement tu veux dire, je tente de suite...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 mars 2014 à 8:47:08

                                DROP INDEX metier ON `tb_evals_de_linscrit_marcvart` 

                                MySQL a répondu: Documentation

                                #1091 - Can't DROP 'metier'; check that column/key exist

                                Je vais regarder ce que l'erreur #1091 veut dire..

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  29 mars 2014 à 8:50:00

                                  Error: 1091 SQLSTATE: 42000 (ER_CANT_DROP_FIELD_OR_KEY)

                                  Message: Can't DROP '%s'; check that column/key exists

                                  en cliquant sur ER_CANT_DROP_FIELD_OR_KEY, j'obtiens :


                                  Error: 1091 SQLSTATE: 42000 (
                                  ER_CANT_DROP_FIELD_OR_KEY)

                                  Message: Can't DROP '%s'; check that column/key exists

                                  Tout cela ne me parle pas beaucoup... J'ai l’impression que ça doit être énorme mais qu'est-ce donc ?

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 mars 2014 à 8:52:03

                                    christouphe te parlais de vérifier à travers l'interface graphique de PMA si l'index existe toujours ou s'il a tout simplement déjà été retiré, expliquant le fait que depuis lors tes requêtes échouent...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 mars 2014 à 9:05:07

                                      Je pense que quelque-chose m'échappe dans ces explications...

                                      Les cases INDEX de la BDD (sous PMA donc) sont toutes décochées, pour autant les cases UNIQUE restent grisées (c'est à dire "indécochables") pour les colonnes citées précédemment metier, entreprise, ville, departement, et ce quelles que soient mes tentatives SQL ou PHP +SQL. Était-ce ce que tu voulais que je vérifie ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 mars 2014 à 9:47:32

                                        ça veut dire que tous les index ont été supprimés
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        "K.I.S.S." Keep It Simple Stupid - Utilisez la Doc - Activer les Exceptions PDO - SQL Formes Normales
                                          29 mars 2014 à 9:52:44

                                          OK et quid des UNIQUE qui restent grisés ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            29 mars 2014 à 9:56:54

                                            les UNIQUE sont des index, avec une particularité supplémentaire : ils interdisent les doublons. Donc si tu n'as d'index, ça comprend les unique aussi... ;)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              29 mars 2014 à 10:09:07

                                              OK, merci pour l'info. il n'empêche que le statut de ces colonnes n'a pas changé puisque lorsque je tente de copier (dupliquer) une ligne de cette table en changeant l'id bien sûr, sql me dit :

                                              #1062 - Duplicate entry 'Architectes  Pattin Vincent-SAINT LEU' for key 'metier_2'

                                              Et ce problème reste vrai uniquement sur les champs pour lesquels la case UNIQUE est grisée, ce qui me laisse penser que le problème n'est pas résolu...

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                29 mars 2014 à 10:25:08

                                                SHOW CREATE TABLE tb_evals_de_linscrit_marcvalt;
                                                Si je ne me trompe pas, ceci va te rendre en résultat une chaîne : la requête qu'il faudrait faire pour recréer ta table telle qu'elle est actuellement. On sera fixés sur la présence ou non d'index (en dehors de la clé primaire, évidemment)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  29 mars 2014 à 10:47:19

                                                  J'en suis revenu à la table d'origine qui était assez petite et qu'il ne m'a pas été difficile de réécrire... Je conserve précieusement ce que tu viens de m'expliquer, mais je suis obligé d'en revenir à une solution de "bucheron" pour le moment car je dois continuer de développer...

                                                  J'attends aussi une réponse du rédacteur de l'article ; si je trouve une solution au problème (car la méthode, il faut bien l'avouer, est extrêmement rapide et économique en ressource), je viendrai faire un post et fermer la discussion.

                                                  Merci à vous Darth Killer et christouphe.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  DROP UNIQUE INDEX ne fonctionne 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