2008-10-15 7 views
30

I ont quelques tables où je créé un ID d'objet soit comme Int ou Bigint, et dans les deux cas, ils semblent auto-incrémentées de 10 (à savoir, le premier insert est objet ID 1, le second ID de l'objet 11, le troisième est l'ID d'objet 21, etc.). Deux questions:La colonne MySQL autoincrement saute de 10- pourquoi?

  1. Pourquoi fait-il cela?

  2. Est-ce un problème?

+0

Ce n'est pas un problème, même si elle pourrait indiquer la souhaite avoir la possibilité d'insérer des valeurs entre les autres et donc de s'appuyer sur l'identifiant comme critère de commande. Ce n'est pas bon. –

+0

Il pourrait également être un problème si vous inquiet de manquer d'identité trop vite (si vous attendez beaucoup de disques), puisque vous utilisez seulement 1/10 de la plage que vous avez pour le stockage. – acrosman

+2

Je suppose que votre auto_increment_increment est réglé sur autre chose que 1 à cause de la réplication. Avec les tables répliquées, il est impossible d'utiliser 1 en raison de collisions de clés potentielles. – mayu

Répondre

42

Vérifiez pour voir la valeur de départ de la autoincrement n'est pas réglé à 10.

Vous pouvez vérifier par:

SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want'; 

Comme il est indiqué ailleurs, vous pouvez modifier en utilisant la variable système @@ set_auto_increment_increment

SET @@auto_increment_increment=1; 

Si vous voulez démarrer les valeurs à un numéro autre que celui yo Vous pouvez y aller:

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+0

Oh, j'ai trouvé mon problème, c'est comment auto_increment_increment est défini. Merci! –

+1

HQ dit pas de dés sur le changement, et docs MySQL dire qu'il ne peut pas être modifiée sur une base par table. Donc, je suppose que je vais devoir vivre avec une limite supérieure de 1,8 quintillion ID au lieu de 18,4 quintillion. –

+8

Votre première instruction select semble montrer que la valeur suivante dans la séquence est, pas combien il incrémente par. –

12

Merci pour Fiorato @ Jim fournir le lien.

Pour vérifier à quel point les incréments de valeur d'incrément automatique par, utilisez la requête suivante:

SHOW VARIABLES LIKE 'auto_inc%'; 

+--------------------------+-------+ 
| Variable_name   | Value | 
+--------------------------+-------+ 
| auto_increment_increment | 10 | 
| auto_increment_offset | 4  | 
+--------------------------+-------+ 
30

S'il vous plaît ne pas modifier le auto_increment_increment.

ClearDB fait exprès: https://www.cleardb.com/developers/help/faq#general_16

+1

génial. Cela m'aide beaucoup. Je vous remercie. – Kabkee

+1

Ne répond pas * techniquement * à la question, mais néanmoins des informations très utiles. –

+0

Cette réponse devrait être combinée avec la réponse acceptée, c'est tout aussi important que l'explication actuellement acceptée. – Todd

1

valeur autoincriment peut sauter si vous utilisez insert avec IGNORE attribut en cas lorsque l'enregistrement n'a pas été créé

insert IGNORE into my_table set column=1 
Questions connexes