PDA

Voir la version complète : décrémenter l'autoincrement :3 ?


MrGecko
27/04/2007, 10h25
Bonjour !

Dans la rédaction d'une fonction php me permettant de supprimer une ligne d'une table MySQL, je décrémente logiquement les id des lignes ayant un id supérieur à la ligne supprimée. Or j'ai activé l'autoincrement pour le champ id de ma table ce qui fait que je me retrouve avec des articles ayant toujours un id plus grand même si je me retrouve avec 2 articles.

Y'a-t-il moyen de modifier avec une requete la valeur actuelle de l'autoincrement ou bien devrais-je gérer l'incrémentation à la main ?

MrCool
27/04/2007, 10h45
Tu peux:

alter table <table> auto_increment=<value>;


Cependant, c'est pas trop l'esprit du système, le fait d'avoir des trous dans tes id est sans conséquence et vu la taille des INT, les probabilités pour que aies vraiment besoin de tout l'espace du type est faible.

Si jamais c'était le cas, je ferais boucler l'id lorsqu'il arrive à max+1 pour repartir de zéro et je transfèrerais les anciennes données dans une table d'archivage, probablement avec un moteur de table optimisé pour les lectures (voir même un moteur de table read-only si c'est possible).

Mais le problème évident est que si tu as un système habituel avec un "display.php?id=X" et que tu changes les IDs tu vas briser tous tes liens.


Dernière chose: les séquences sont gérées dans une table à part dans PEAR car c'est une fonctionnalité qui n'est pas gérée par tous les SGBD. Si ce genre de souci te préoccupe, je te conseille de jeter un coup d'oeil fait là-bas.

UniversalC
06/06/2007, 21h22
Hello,
Comme l'a dit M. cool, c'est pas conseillé de jouer a decrementer un auto-increment, c'est pas l'esprit du tout .... A ta place, je supprimerai la ligne et je passerai a l'id suivant, avec certes un saut dans l'incrementation.

Avec un id de type int classique, tu as deja 2 puissance 32 possibilités, donc ton id peut aller de -2147483648 a 2147483648.
A+