Mysql me rend fou :(

Résolu
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009 - 6 oct. 2008 à 12:45
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009 - 6 oct. 2008 à 14:24
Bonjour,

Et merci d'avance à celles et ceux qui me répondront.

Voilà mon problème. Lorsque par exemple, j'ajoute un 'row' à une table, et que le dernier 'id' (PRIMARY key) était par exemple, 13, le nouveau lui aura comme 'id', le nombre 14. C'est bien jusque là car ce champ est en auto-incrémentation.

Par contre, là ou ça me rend dingue, c'est qu'après avoir effacé le row ayant pour 'id' 14 (celui que je venais d'ajouter) et qu'ensuite j'en rajoute un autre, l'id devient alors '15'. Alors que ça devrait être 14 (étant donné que le row avec l'id 14 a été effacé juste avant.

Est-ce que quelqu'un parmi vous aurait l'amabilité de m'expliquer ce comportement ?

J'ai fait quelques recherches et je suis tombé sur les INDEXATIONS. J'ai compris que ça rendait les recherches dans les tables bien plus rapides que s'il n'y en avait pas. Mais, sont-ce ces 'index' qui me bousillent mon champ 'id' ?

Existe-t-il un moyen ou une commande (je sais j'en demande beaucoup ) pour qu'après chaque 'INSERT INTO'/'DELETE'/'UPDATE', cela fasse en sorte de "tout remettre en ordre" ?

Cordialement

2 réponses

gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
6 oct. 2008 à 14:15
Hello,
oui c'est normal et imagine la charge de traitement si ta table comporte je sais pas, par exemple 3000 champs et que tu supprime la 1ere ligne. Le SGBD devrait modif tte les lignes ainsi que la table d'index sachant que suivant l'architecture du SGBD des infos peuvent être en mem centrale sur disque ou en cash. Enfin le pb vient surtout du fait qu'une clé primaire doit être stable et unique donc ne doit pas être modif. Le mieux éviter l'autoincrément, qui posséde d'autres inconvénient, avec mysql_insert_id par ex ou créer toi même ton propre id unique avec certaines fct.
3
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
6 oct. 2008 à 14:24
Merci gr43.

En effet, après encore des recherches/expérimentations, j'en suis arrivé à cette conclusion aussi.

Soit j'écris le code pour une gestion complête des 'id' uniques pour mes tables ou alors je pourrais aussi utiliser une requête du genre "ALTER TABLE `nom_de_la_table`  AUTO_INCREMENT =nombrederowsactuel+1 ". Bien sur, pour la deuxieme solution, il me faudra utiliser un autre login à MySQL ayant lui les privilèges suffisants pour la commande 'ALTER'. Et cela, juste pour réajuster l'auto-increment.

Je vais tester les 2 pour voir/apprendre/comprendre.

Cordialement
0
Rejoignez-nous