Remise à zéro autoindex mysql

poupilou

WRInaute impliqué
Bonjour, j'essaie la requête suivante ALTER TABLE `ma_table` AUTO_INCREMENT=0 mais ça ne ré-initialise pas le compteur de l'AUTO_INCREMENT, si j'ai supprimé des entrées dans ma table il y a donc des "trous" dans la numéroration et j'aimerai les combler, je pensais qu'avec la requête suivante ALTER TABLE `ma_table` AUTO_INCREMENT=0 ça fonctionerait, mais ç'est pas le cas ! Savez-vous comment faire ? Merci pour vos réponses.
 

jcaron

WRInaute accro
auto_increment ne sait pas "remplir les trous", et tu ne peux pas remettre le compteur à une valeur inférieure à la plus grande valeur déjà attribuée.

Jacques.
 

UsagiYojimbo

WRInaute accro
+1 avec jcaron. Et j'ai du mal à imaginer l'intérêt que cela peut avoir de combler ces fameux "trous" vu que cela n'entame en rien les performances.
 

poupilou

WRInaute impliqué
Merci pour vos réponses.

Comme je met à jour ma table toutes les semaines et qu'il peut y avoir parfois des milliers d'articles supprimés et donc des milliers qui viennent s'ajouter, imaginez dans 5 ans le compteur de l'AUTO_INCREMENT, il sera à 12569566544566, alors que si chaque semaine les nouveaux produits viennent combler les "trous" ce sera déjà plus acceptable, non ?
 

jcaron

WRInaute accro
10 000 articles par semaine * 52 semaines * 100 ans = 52 millions. Si tu utilises bien des "int" (et pas des tinyint / smallint / mediumint), ça rentre largement dans un entier 32 bits (tu peux aller jusqu'à 2 milliards suivant les cas, 4 si ton champ est en unsigned int). Si jamais ça ne te paraît pas suffisant, tu peux passer sur un unsigned bigint et là la limite est de 16 milliards de milliards.

Où est le problème?

Jacques.
 

UsagiYojimbo

WRInaute accro
Tu peux aussi t'affranchir complètement d'utiliser ces id dans l'url (en créant un champ spécifique qui contiendrait l'url du produit, qui serait unique, et qui te servirait de clé pour retrouver les infos du produits). Ca te permettrait aussi du coup de raccourcir tes url.
 

poupilou

WRInaute impliqué
Oui ça aurait pu être une solution mais ma table contient plus de 100 000 lignes et 25 colonnes, imagine le nombre de données à traiter, mes requêtes son assez lentes, il est difficile de créer une nouvelle colonne et de rajouter encore du contenu.
 

UsagiYojimbo

WRInaute accro
Pas forcément, logiquement tes titres de produit son uniques, donc tu peux tout a fait je penser generer ton url a partir de ceux-ci après le traitement qui va bien.
 

poupilou

WRInaute impliqué
Désolé j'ai pas compris ta réponse, qu'entend-tu par "generer ton url a partir de ceux-ci après le traitement qui va bien" ?
 

UsagiYojimbo

WRInaute accro
Hé bein tu génères le contenu de ce champ url à partir du titre du produit, après avoir retraité ce titre de manière à supprimer tous les caractères qui n'ont pas leur place dans une url (accents, ponctuations, etc.) et les espaces par des -.
 

poupilou

WRInaute impliqué
ce n'est pas possible car je n'ai pas de titres distinct pour mes produits, le titre est créé par une association de plusieurs de mes champs mais il y a assez souvent des titres identiques, donc cela ferait des doublons. La seule solution reste un numéro unique présent dans le titre qui permette de retrouver l'id du produit dans la table.
 

UsagiYojimbo

WRInaute accro
Si vraiment ce que tu cherches à faire c'est "combler" les trous, lors de la création d'un nouveau contenu, il va te falloir faire une recherche dans la base de donnée (triée par id croissant) pour récupérer le premier emplacement "vide", c'est à dire l'identifiant x qui n'est pas suivi par un identifiant x+1.
 

jcaron

WRInaute accro
poupilou a dit:
Le souci c'est que dans l'url de mes pages descriptives de mes produits se trouvent le numéro de l'AUTO_INCREMENT (http://www.mon-site.com/produit-112.html) et si ces numéros changent toutes les semaines c'est pas bon pour le référencement de ces pages via GG, d'ou mon idée de garder si possible les mêmes numéros et/ou de les ré-utiliser.

Ca n'a pas grand chose à voir tout ça... Si c'est le même produit qui change, il faut garder son id. Tu fais ça au moment où tu traites tes mises à jour: tu cherches le produit correspondant (tu dois bien avoir un critère qui te permet de le reconnaître, non?), s'il existe tu fais un update, sinon un insert. Dans les deux cas tu as un champ "dernier update", et si la date du dernier update est supérieure à la date de début du traitement, hop, tu effaces.

C'est un flux produit, non?

Jacques.
 

poupilou

WRInaute impliqué
UsagiYojimbo le souci avec un champs en AUTO_INCREMENT c'est que ce n'est pas moi qui décide quel chiffre je met dans ce champs, si j'ai un trou pour le numéro "122" il restera manquant, il n'y a pas de moyen de recréer un n° 122 tant qu'il y a l'AUTO_INCREMENT sur ce champs.

Merci pour ta réponse Jacques. Je vais suivre tes indications et voir comment je peux faire.
 

Discussions similaires

Haut