2011-03-18 4 views
2

J'ai une colonne de clé primaire dans ma table pour auto-incrémenter. Cependant, lorsque je supprime une ligne de la table qui a l'ID de clé primaire le plus élevé (disons 11). Ensuite, la prochaine fois que je fais une insertion, elle insère la clé comme 12 et non 11 (bien que logiquement, elle peut utiliser 11 car il n'y a pas d'entrée associée à la touche 11). Comment puis-je y arriver?autoincrement dans MySQL

Répondre

6

Êtes-vous vraiment sûr de vouloir cela? Une colonne auto-incrémentée garantira un nombre unique, et c'est suffisant. Vous pouvez mettre à jour la prochaine valeur auto-incrémentée (je vais devoir chercher comment cela fonctionne), mais je ne pense pas que vous devriez le vouloir.

Si vous devez contrôler les nombres dans une colonne, vous devez le faire manuellement.

néanmoins, vous pouvez modifier le numéro de autoincrement comme ceci:

ALTER TABLE tbl AUTO_INCREMENT = 100; 

(à partir de: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html)

Une autre remarque: Si vous avez des numéros un à dix, et que vous supprimez 5, vous ne pouvez pas facilement fais ceci. Vous pouvez difficilement faire le prochain auto_increment 5 parce que 6 est déjà là. Donc, encore une fois, alors que peut faire quelque chose de sale pour votre exemple, il est vraiment difficile de le faire dans un environnement réel. Peut-être commencer une nouvelle question avec la description de votre situation, et demander des conseils sur la façon d'aborder ce problème sans les astuces auto_increment :)

+2

Oui. Vous ne devez plus utiliser d'identifiant supprimé. –

+0

ok alors si c'est la meilleure pratique – aherlambang

0

Mysql n'a pas cette fonctionnalité hors de la boîte, vous aurez besoin de le coder dans ton application. Un problème que vous aurez est que si 2 transactions veulent obtenir et ID, l'un d'eux obtiendra une erreur d'identification en double. De couse, c'est mieux à éviter.

Tous les moteurs de base de données ne disposent pas de cette "fonctionnalité", car ce n'est pas bon pour la simultanéité.