Partage
  • Partager sur Facebook
  • Partager sur Twitter

Reset index Table

Sujet résolu
    4 septembre 2019 à 9:33:17

    Bonjour à tous,

    Normalement je ne fais pas gaffe à l'id de mes enregistrements mais la ... c'est au dessus de mes forces ... je dois avoir un gros bug sur mon script qui fait les insert en bdd car je me retrouve avec un id 62578 alors que je n'ai que 128 enregistrement sur la table ...

    Comment faire pour reseter les index. 

    Sachant que j'ai déjà essayé de copier la table et supprimer l'originale, faire un export / import, et mettre l'auto increment a 0. Le problèle c'est qu'a chaque fois il concerve mon id (mac_id). Lorsque je regarde le fichier d'export j'ai bien un champ mac_id dans la requete d'insert avec des valeurs allant jusqu'à 62578.

    Merci d'avance,

    Je retourne chercher pourquoi j'ai un id aussi élevé dans mon script :D

    Sujet résolut, j'ai fais un select de tout les champs sauf de l'id, j'ai exporté les resultats de la requête, j'ai récupéré la partie de l'export qui faisait l'insertion en bdd, j'ai vider ma table et réinséré les résultats ! Pffff :D

    -
    Edité par methos0 4 septembre 2019 à 13:54:09

    • Partager sur Facebook
    • Partager sur Twitter
      4 septembre 2019 à 14:02:27

      Bonjour,

      methos0 a écrit:

      pourquoi j'ai un id aussi élevé

      Je ne sais pas si tu utilises MySQL, mais ce dernier incrémente à chaque tentative d'insertion ... même si celle-ci échoue ... si ton programme fais des tentative d'insertion malencontreuse ou utilise INSERT INTO ... ON DUPLICATE KEY ... alors cela peut expliquer l'incrémentation inutile ...

      Est-ce que le problème s'aggrave, c'est à dire, est-ce qu'à chaque nouvelle insertion l'auto incrément incrémente de plus de 1 ?

      methos0 a écrit:

      Comment faire pour reseter les index

      Tu trouveras ta réponse sur le net (SET AUTO_INCREMENT pour MySQL), mais je ne suis pas sûr que ce soit une bonne chose, car tu vas avoir des risques de percussion en reprenant l'incrément en dessous de valeurs déjà existante.

      Si tu as des contraintes de clé étrangère qui utilise ce mac_id il vaut mieux conserver ces id et régler le problème des incrémentations augmentation inutile ...

      L'auto incrément n'a pas vocation a avoir un sens pour l'homme, mais ne sert qu'à assurer l'intégrité des données notamment dans le cadre des contraintes relationnelles (clés étrangères), donc avoir un id à 62000 n'est pas en soit un problème ... Maintenant si tu veux vraiment réinitialiser ces id, il faut :

      • exporter la table et son contenu sans la colonne mac_id
      • vider la table de son contenu (TRUNCATE)
      • réinitialiser l'auto_increment (SET AUTO INCREMENT)
      • puis importer les données exportées précédemment sans la colonne mac_id
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        5 septembre 2019 à 10:23:56

        Oui c'est a cause du ON DUPLICATE KEY ... ne devrais je pas faire à "l'ancienne", une requête pour voir si l'enregistrement existe et en fonction un insert ou un update ?

        • Partager sur Facebook
        • Partager sur Twitter
          5 septembre 2019 à 11:20:41

          Dans quel contexte utilises-tu ON DUPLICATE KEY ? Car pour générer 62 578 insert au lieu de 128, il y a peut-être un problème ...

          Le problème vient du comportement du moteur de table InnoDB, que tu peux corriger avec l'option de configuration de MySQL :

          https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_autoinc_lock_mode

          -
          Edité par Benzouye 5 septembre 2019 à 11:30:14

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            5 septembre 2019 à 11:46:11

            Ce code est utilisé dans une cron qui met à jour du vendredi au dimanche soir un calendrier sportif afin de récupérer automatiquement le score du week end ou les eventuels changements de lieu, d'heure, d'arbitre ...

            Donc c'est normal que je monte a 62000 en index, car le nouveau calendrier viens de sortir, donc il a inséré les nouveaux match en bdd et vu le nombre de fois ou la bdd a été mise a jour (40 par heure pendant 3 jours) alors ça monte rapidement :p

            Comme c'est une cron je me suis pas trop pris la tête :p

            • Partager sur Facebook
            • Partager sur Twitter
              5 septembre 2019 à 12:18:32

              Si tu n'as pas de problème d'accès concurrent ou de réplication, tu peux mettre innodb_autoinc_lock_mode = 0

              Tu peux aussi t'assurer que la colonne auto incrémenté est de type BIG INT UNSIGNED et ne plus te soucier de tes trous dans l'incrémentation avant plusieurs années :p

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Reset index 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