web-dev-qa-db-fra.com

Erreur MySQL - # 1062 - Entrée en double '' pour la clé 2

J'essaie d'insérer une liste énorme d'utilisateurs dans une base de données MySQL, mais chaque fois que j'essaye, j'obtiens l'erreur suivante: 

#1062 - Duplicate entry '' for key 2

Cela me donne cela parce que la 2ème colonne est vide sur un grand nombre d'entrées, donc après avoir inséré une entrée vide dans la colonne 2, elle ne me permet pas d'en ajouter une autre. Cependant, lorsque j'ai ajouté la majeure partie de la liste hier, je n'ai pas eu cette erreur une fois, même si bon nombre des entrées que j'ai ajoutées hier ont également une cellule vide dans la colonne 2. Que se passe-t-il? 

C'est le code SQL à insérer 1 entrée. Les autres suivent le même format:

INSERT INTO users
  (`id`,`title`,`firstname`,`lastname`,`company`,`address`,`city`,`county`
   ,`postcode`,`phone`,`mobile`,`category`,`email`,`password`,`userlevel`) 
VALUES     
  ('','','John','Doe','company','Streeet','city','county'
  ,'postcode','phone','','category','[email protected]','','');
21
nutman

En plus de la réponse de Sabeen:

La première colonne identifiant est votre clé primaire.
N'insérez pas '' dans la clé primaire, mais insérez null à la place.

INSERT INTO users
  (`id`,`title`,`firstname`,`lastname`,`company`,`address`,`city`,`county`
   ,`postcode`,`phone`,`mobile`,`category`,`email`,`password`,`userlevel`) 
VALUES     
  (null,'','John','Doe','company','Streeet','city','county'
  ,'postcode','phone','','category','[email protected]','','');

S'il s'agit d'une clé auto-incrémentée, cela résoudra votre problème.
Si vous ne faites pas de id une clé auto-incrémentée, insérez-y toujours null pour déclencher une auto-incrémentation.

MySQL dispose d'un paramètre pour incrémenter automatiquement les clés uniquement sur l'insertion null ou sur les deux insertions de 0 et null. Ne comptez pas sur ce paramètre, car votre code peut casser si vous changez de serveur.
Si vous insérez null, votre code fonctionnera toujours.

Voir: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

15
Johan

On dirait que la deuxième colonne est définie comme un index unique. Si vous n'en avez pas besoin, supprimez-le et vos erreurs disparaîtront. Peut-être avez-vous ajouté l'index par erreur et c'est pourquoi vous voyez les erreurs aujourd'hui sans les voir hier

10
Sabeen Malik

J'ai eu cette erreur lorsque j'ai essayé de définir une colonne comme unique lorsqu'il y avait déjà des données en double dans la colonne OR si vous essayez d'ajouter une colonne et de la définir comme unique s'il y a déjà des données dans la table.

J'avais une table avec 5 lignes et j'ai essayé d'ajouter une colonne unique et elle a échoué car toutes les 5 lignes seraient vides et donc non uniques.

J'ai créé la colonne sans l'index unique défini, puis rempli les données, puis défini comme unique et tout fonctionnait.

2
ajon

Erreur 'Entrée en double' 338620-7 'pour la clé 2' sur la requête. Base de données par défaut 

Pour cette erreur:

set global sql_slave_skip_counter=1; 
start slave; 
show slave status\G

Cela a fonctionné pour moi 

1
Ashish Karpe

Comme il a été dit, vous avez un index unique. 

Cependant, lorsque j'ai ajouté la majeure partie de la liste hier, je n'ai pas eu cette erreur une fois, même si bon nombre des entrées que j'ai ajoutées hier ont également une cellule vide dans la colonne 2. Que se passe-t-il?

Cela signifie que toutes ces entrées contiennent la valeur NULL, pas une chaîne vide ''. Mysql vous permet d'avoir plusieurs valeurs NULL dans des champs uniques.

1
a1ex07

Consultez votre index de table . Si ce champ contient un index (par exemple, un index d'arborescence B +), la requête de mise à jour ou d'insertion génère ce type d'erreur.

Supprimez l'indexation, puis essayez de lancer la même requête.

1
Jasmeen

vous pouvez essayer d'ajouter 

$db['db_debug'] = FALSE; 

dans "votre fichier de base de données" .php, vous pourrez ensuite modifier votre base de données à votre guise.

1
Sankar Bordoloi
  1. Commencez par déposer la clé primaire:

    ALTER TABLE Persons DROP PRIMARY KEY ;
    
  2. Puis faites toutes les insertions: 

  3. Ajouter une nouvelle clé primaire comme avant de déposer:

    ALTER TABLE Persons ADD PRIMARY KEY (P_Id);
    
0
gomozor