Mysql - double erreur de saisie de la clé avec l'auto-incrément
Pourquoi j'obtiens une erreur de la forme:
Error in query: Duplicate entry '10' for key 1
...lors d'une instruction INSERT comme:
INSERT INTO wp_abk_period (pricing_id, apartment_id) VALUES (13, 27)
...avec les 13 et 27 étant une pièce d'identité-s pour les pricing
et apartment
lignes, et la table est définie comme:
CREATE TABLE `wp_abk_period` (
`id` int(11) NOT NULL auto_increment,
`apartment_id` int(11) NOT NULL,
`pricing_id` int(11) NOT NULL,
`type` enum('available','booked','unavailable') collate utf8_unicode_ci default NULL,
`starts` datetime default NULL,
`ends` datetime default NULL,
`recur_type` enum('daily','weekly','monthly','yearly') collate utf8_unicode_ci default NULL,
`recur_every` char(3) collate utf8_unicode_ci default NULL,
`timedate_significance` char(4) collate utf8_unicode_ci default NULL,
`check_in_times` varchar(255) collate utf8_unicode_ci default NULL,
`check_out_times` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`),
KEY `fk_period_apartment1_idx` (`apartment_id`),
KEY `fk_period_pricing1_idx` (`pricing_id`),
CONSTRAINT `fk_period_apartment1` FOREIGN KEY (`apartment_id`) REFERENCES `wp_abk_apartment` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_period_pricing1` FOREIGN KEY (`pricing_id`) REFERENCES `wp_abk_pricing` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
N'est pas key 1
id
dans ce cas, et en avoir une sur auto_increment
suffisante pour être en mesure de ne pas le préciser?
Remarque: Si je viens d'offrir une valeur inutilisée pour id
, comme INSERT INTO wp_abk_period (id, pricing_id, apartment_id) VALUES (3333333, 13, 27)
il fonctionne très bien, mais là encore, il est défini comme auto_increment
donc je ne devrais pas besoin de le faire!
Note 2: OK, c'est un "twilight zone" moment: ainsi, après l'exécution de la requête ci-dessus avec le grand nombre de id
, les choses ont commencé à travailler normalement, pas plus duplicate entry errors
. Quelqu'un peut-il m'expliquer WTF a MySQL de faire pour produire ce comportement bizarre?
pas (ou du moins je ne le pense pas). J'ai créé toutes les tables de me créer des instructions comme ci-dessus. La sortie de
show create table wp_abk_period
est listé ci-dessus et show triggers
ne retourne rien... de plus, si je viens d'offrir une valeur inutilisée pour id
il fonctionne très bien...OriginalL'auteur NeuronQ | 2013-02-14
Vous devez vous connecter pour publier un commentaire.
Il se peut que votre AUTO_INCREMENT de la valeur pour la table et les valeurs réelles dans
id
colonne ont obtenu hors de contrôle.Ce qui pourrait aider:
Étape 1 - Obtenir un Max id de tableau
Étape 2 - Aligner l'AUTO_INCREMENT compteur sur le tableau
Étape 3 tentatives de les insérer
Comme pour pourquoi l'AUTO_INCREMENT a obtenu hors de contrôle je ne sais pas. Ajouté auto_increment après données dans le tableau? Modifié la valeur auto_increment après que les données ont été insérées dans la table?
Espère que cela aide.
OriginalL'auteur Tom Mac
J'ai eu le même problème et voici ma solution :
Ma colonne ID avait un mauvais paramètre. Il a été Tinyint, et MySql voulez écrire un 128ème ligne.
Parfois, votre problème, vous pensez que plus vous avez un petit paramètre...
Pour ceux qui en ont besoin, on le fixe à l'
alter table my_table auto_increment=1, modify column my_id integer not null auto_increment;
Cela réinitialise le auto_increment à la valeur la plus élevée + 1, et recrée la colonne avec un champ de type auto_increment.OriginalL'auteur Mickael
Vous pouvez vérifier la valeur actuelle de l'auto_increment avec la commande suivante:
Puis vérifiez la valeur max de l'id et de voir si il ressemble à droite. Si pas de changement de l'auto_increment de la valeur de votre table.
OriginalL'auteur Magnus Lindgren
La fin de la partie, mais je viens de tomber sur ça ce soir - double de la clé '472817" et les réponses n'ont pas les aider.
Sur un coup de tête, j'ai couru:
de sortie
Semble que mysql a le nombre de lignes de mal, et le problème a disparu.
Mon environnement:
Syntaxe Create table:
Je suis en utilisant une ancienne version de mysql dans un environnement de dev, donc je ne présumez pas que le moteur fonctionne sans faille.
OriginalL'auteur efess
Lors du débogage de ce problème, vérifiez le nom de la table sensibilité à la casse (surtout si vous exécutez MySql et non pas sur Windows).
E. g. si un script qui utilise la majuscule pour "CRÉER une TABLE ma_table' et d'un autre script tente d' 'INSERT INTO MA_TABLE'. Ces 2 tables peuvent avoir des contenus différents et à différents emplacements du système de fichiers qui pourraient conduire le problème décrit.
OriginalL'auteur Sergey Shcherbakov