2013-07-09 3 views
0

J'ai simplemysql d'erreur d'incrémentation automatique

INSERT INTO t1 (fields...) (SELECT fields... FROM t2); 

insère autour de 8,000 lignes et la valeur d'incrément automatique de la table est ~ 16,000, mais ce n'est pas exactement 2x autant. Je n'inclut pas l'ID incrémenté automatiquement dans la requête et les tables sont tronquées. Peut-il être un bug? J'ai la version 5.5.24. Pourquoi est-ce, et comment puis-je éviter cela?

CREATE TABLE `order` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `` int(4) NOT NULL COMMENT '', 
    `` int(6) NOT NULL COMMENT '', 
    `` varchar(255) NOT NULL COMMENT '', 
    `` varchar(255) NOT NULL COMMENT '', 
    `` bigint(10) unsigned NOT NULL COMMENT '', 
    `` int(5) unsigned NOT NULL COMMENT '', 
    `` int(5) unsigned NOT NULL COMMENT '', 
    `` int(8) unsigned NOT NULL COMMENT '', 
    `` varchar(255) DEFAULT NULL COMMENT '', 
    `` int(3) DEFAULT NULL COMMENT '', 
    `` int(3) DEFAULT NULL COMMENT '', 
    `` date NOT NULL COMMENT '', 
    `` date DEFAULT NULL, 
    `` date DEFAULT NULL COMMENT '', 
    `` int(5) DEFAULT NULL COMMENT '', 
    `` varchar(2) DEFAULT NULL COMMENT '', 
    `` int(5) DEFAULT NULL COMMENT '', 
    `` varchar(255) DEFAULT NULL, 
    `` varchar(255) DEFAULT NULL, 
    `` char(1) DEFAULT NULL, 
    `` datetime DEFAULT NULL, 
    `` int(10) unsigned DEFAULT NULL, 
    `` datetime DEFAULT NULL, 
    `` int(10) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `` (``), 
    KEY `` (``), 
    KEY `` (``), 
    CONSTRAINT `` FOREIGN KEY (``) REFERENCES `users` (`id`), 
    CONSTRAINT `` FOREIGN KEY (``) REFERENCES `users` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=8440 DEFAULT CHARSET=utf8 

Merci.

+0

S'agit-il d'une insertion initiale dans une nouvelle table ou peut-il y avoir des enregistrements supprimés? –

+0

Tronquer devrait fonctionner. Voir [ici] (http://sqlfiddle.com/#!2/dd8e2/6) –

+0

oui je sais, c'est pourquoi c'est bizarre pour moi aussi. – user2511599

Répondre

1

Cela pourrait être causé par la configuration de votre serveur (/etc/my.cnf par exemple): Vous pouvez régler la auto_increment_increment et la auto_increment_offset. Si le premier est défini sur x, vous aurez (last_id + x) pour votre ID suivant. Si le second ID est défini sur y, vous commencez toujours par y (puis ajoutez x à chaque fois).

Plus probablement: Vous venez de supprimer toutes les lignes de votre tableau et de les réinsérer. De cette façon, la valeur auto_increment n'est pas de nouveau définie sur 1. Vous devez TRUNCATE tablename réinitialiser ce compteur (si vous voulez vraiment supprimer toutes les lignes).

Edit:

Je viens de voir votre déclaration CREATE TABLE. Si vous avez vraiment créé votre table avec AUTO_INCREMENT=8440 dans les options, bien sûr, après avoir inséré 8000 lignes, vous aurez un ID à 16000. Si c'est juste un après l'instruction d'insertion, je ne sais toujours pas ce qui se passe.

+0

J'ai une configuration de base wampserver, je ne ' Je pense qu'il n'y a pas de valeurs par défaut 'auto_increment_offset' ou' auto_increment_increment'. Oui, je l'ai vérifié et les deux sont réglés sur «1». – user2511599

Questions connexes