2010-09-10 11 views
0

Je me demandais quelle est la manière la plus simple de laisser un ID de table automatiquement, à l'exception de AUTO_INCREMENT.Existe-t-il un moyen simple de ne plus développer les identifiants de ligne MySQL?

J'ai une table qui va accumuler des milliers de lignes sur une longue période de temps. Certaines de ces lignes seront supprimées ultérieurement. Comment puis-je obtenir de nouvelles lignes pour obtenir le plus bas id disponible, sans entrer dans le faire manuellement. Puis-je par exemple réinitialiser AUTO_INCREMENT à chaque fois que quelqu'un ajoute une ligne?

+2

Pourquoi voulez-vous faire cela? Il peut très bien bousiller les requêtes passées pour les anciennes données, maintenant supprimées. – BoltClock

+1

Je suis curieux - pourquoi avez-vous besoin d'identifiants séquentiels sans lacunes? –

+0

vous ne devriez pas faire cela. De telles questions devraient être fermées sous certaines conditions FAQ. Trop de discussion sur un tel malentendu des conceptions de base –

Répondre

0

Il est possible de réinitialiser l'incrément automatique à l'autre ID possible:

ALTER TABLE table_name AUTO_INCREMENT = 1 

Vous ne disposez même pas de le mettre à la prochaine clé disponible. MySQL prendra automatiquement la clé suivante lors de la prochaine mise à jour. Donc, même en le mettant à "1" à chaque fois est sûr. Mais si vous ne vous souciez pas de l'ID, pourquoi utilisez-vous même un ID? Et même un grand nombre d'identifiants ne pose pas de problème. J'ai eu une table avec plus de 20 millions d'entrées et je n'ai jamais eu de problème avec les identifiants.

+0

Pourquoi les gens refusent-ils toujours les réponses possibles à la question OP sans les expliquer? – 2ndkauboy

+0

J'ai voté pour votre réponse et je l'ai marquée comme la bonne réponse. Je sais que cela est rarement nécessaire et devrait être résolu par d'autres moyens, mais un développeur doit connaître les mauvaises pratiques afin de les éviter. Tout le reste serait bête. – Hubro

+0

La raison pour laquelle j'ai besoin de ceci est que cette table particulière pourrait recevoir des millions de lignes, mais pas nécessairement contenir plus de dizaines ou de centaines de lignes à la fois. Semblait un peu exagéré pour les ids d'être dans les millions dans ce cas. Mais merci pour votre réponse! – Hubro

4

Franchement, cela ne vaut pas la peine. Je crois que c'est possible, mais c'est juste un identifiant unique à la fin de la journée - peu importe si c'est 1 ou 1000.

Si c'est à d'autres fins, pensez à utiliser un autre champ.

IMO vous ne devriez pas jouer avec les index.

2

pas possible, un ID est unique et peut être utilisé qu'une seule fois ..

possible que si vous videz votre table.

+1

C'est faux. Il ne peut être utilisé qu'une seule fois en même temps, mais il peut être réutilisé si vous avez supprimé une entrée. – 2ndkauboy

+0

droite @ Kau-Boy :) –

+0

@Kau non, vous avez tort. Si l'enfant mourrait et en portait un autre, ce serait encore un autre, même s'il porte le nom du premier. Vous avez mal compris le concept d'identification unique. –

1

Qui s'en soucie? Un integer peut avoir des milliards de valeurs uniques, tous coûtent la même quantité de mémoire (4 octets chacun). Jouer avec la clé primaire est comme la roulette russe à votre base de données: à la fin votre base de données va mourir (elle est corrompue).

0

Je suppose que vous pourriez utiliser des déclencheurs pour cela, mais cela deviendra probablement un énorme désordre après un certain temps. Ne voyez pas pourquoi vous ne voudriez pas utiliser auto_increment à la place, avez-vous une raison particulière?

Triggers in MySQL 5.0

@Jordy: Votre déclaration n'est pas tout à fait vrai, oui une seule ligne peut avoir qu'une valeur à un moment donné, mais si vous supprimez une ligne, vous pouvez toujours réutiliser la valeur supprimée pour une autre ligne. Vous pouvez également réinitialiser le compteur à n'importe quelle valeur que vous souhaitez inclure l'incrément sans supprimer la table.