#1062 duplicate entry '127' for key 1

Eléphant du PHP | 289 Messages

21 mars 2005, 09:52

Bonjour,

je viens d'arriver au boulot et mes collègues me signelent qu'il est impossible d'ajouter des enregistrements dans la table "actions".
apres plusieurs essais infructueux, je suis passé directement par easy php pour insérer un enreistrement.

mais la, il me met le message "#1062 duplicate entry '127' for key1"

j'ai supprimé cet enregistrement et refait un nouveau enregistrement et ca a marché. j'ai donc voulu en faire un autre, mais la, de nouveau le message d'erreur.

j'ai vérifié qu'il n'ai pas 2 fois le 127!!!

est ce que quelqu'un aurait une solution a ce problème???

pour info, il m'est possible de faire des enregistrements sous les autres table.

merci de votre aide,
FAb

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 mars 2005, 10:33

sans voir la structure de la table, la requête INSERT utilisée et certaines valeurs existantes on ne peut rien dire. Mais le message "#1062 " concerne un doublon de valeur de clé primaire ou d'index unique c'est à dire que la valeur entrée existe déja soit dans champ jouant le rôle de clé primaire ou index unique.
Regardez du côté du vérouillage d'enregistrement et de la gestion de l'indexation, consultez ce lien :
http://www.nexen.net/docs/mysql/annotee ... ?lien=lock pour plus d'informations
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 19672 Messages

21 mars 2005, 11:35

Si tu as une clé primaire en "auto-increment", l'affichage de l'erreur vient de ce que tu envoies une valeur de clé primaire toi-même alors qu'elle existe déjà. Dans ta requête d'insertion, tu peux n'envoyer que les valeurs des autres champs sans mettre de clé primaire puis récupérer cette valeur de clé avec LAST_INSERT_ID (ou quelque chose de ce genre) si tu en as besoin pour mettre à jour certaines autres tables. La clé primaire sera générée automatiquement par le SGBD.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 289 Messages

21 mars 2005, 12:45

bonjour les gars!

merci de vos réponses;

ce que je en compends pas c pourkoa ca arrive alors que je n'ai rien touché a ma requete et à ma table via le panneau admin de easyphp ! :x

que'est ce que je pourrai vous fournir pour que vous puissiez mieux cibler le pb????

merci de votre aide,
FAb

Mammouth du PHP | 19672 Messages

21 mars 2005, 12:55

Disons qu'avec la structure de la table et le bout de code qui fait l'insertion, on verra mieux où chercher le bobo
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 13 Messages

21 mars 2005, 14:11

Salut

Quel est le type de ton identifiant??
Apparement tu as du mettre un identifiant en tinyint qui permet de gérer que peu de valeur(255) en entier signé et ca doit buggué a partir de ton 127eme enregistrement.

essaye avec mediumint unssigned comme type pour ton champs ID.

Ayayaaa

Eléphant du PHP | 289 Messages

21 mars 2005, 19:06

Alut :D

g retrouvé le sourrir grace a vous :P

en fait, j'ai juste changer "tinyint " par "mediumint " et maintenant tout va bien!
MERCI 8)

sinon, ca apporte koa unssigned ??
et ou est ce que je pourrai trouver la signification des option posiibles pour les champs des tables dans easyphp???

merci bcq,
FAb

Mammouth du PHP | 859 Messages

21 mars 2005, 19:45

Tu trouveras ton bonheur ici ;)

http://www.nexen.net/docs/mysql/annotee ... erview.php

Pour info ce n'est pas easyphp qui contient des champs mais MySQL ;)

Eléphant du PHP | 289 Messages

21 mars 2005, 19:58

re,

merci pour le lien!

dsl pour le l'apsus des doigts 8)

merci encore,
FAb

Eléphanteau du PHP | 13 Messages

21 mars 2005, 20:45

Re

si tu mets pas unsigned ton champs pourra contenir des nombres allant de -k à +k.
Or pour un identifiant tu n'as pas besoin des nombres négatifs.
Si tu mets unsigned tu pourras entrer des nombres dans ton champs allant de 0 à +2k.
Donc pour la même taille mémoire utilisé sur ton serveur tu peux mettre 2 fois plus d'enregistrement.

AYAYAAA

Eléphant du PHP | 289 Messages

21 mars 2005, 21:58

re re

Pas mal ton explication!! c un bon moyen de gagner "de la place"!!!

merci encore,
FAb

Invité
Invité n'ayant pas de compte PHPfrance

31 mars 2005, 16:19

Hey merci pour ce post qui a répondu à mon problème !

fowler
Invité n'ayant pas de compte PHPfrance

30 nov. 2005, 15:36

Je possède la même erreur, voila mon code
# TABLE: phpbb_search_wordlist
#
DROP TABLE IF EXISTS phpbb_search_wordlist;
CREATE TABLE phpbb_search_wordlist(
word_text varchar(50) NOT NULL,
word_id mediumint(8) unsigned NOT NULL auto_increment,
word_common tinyint(1) unsigned NOT NULL,
PRIMARY KEY (word_text),
KEY word_id (word_id)
);

Je ne sais pas quoi changer, car je suis pas un expert avec les tinyint, mais mon erreur est la suivante
Image

Merci les gars de votre aide, si jamais je suis sur msn [email protected] si qqn veut m'expliquer en live

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 nov. 2005, 15:50

Est-ce que tu as lu le post ?

parce que cette erreur signifie que tu veux insérer une ligne dont la clé primaire existe déjà dans la table
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

30 nov. 2005, 15:54

J'ai pas très bien compris ton message.

En fait quand j'enlève la ligne qui est à double dans la base que je veux importer, ça marche, mais je dois le faire pour tous les mots à double, exemple :
préparation - preparation / Il y aura une erreur #1062
complétement - completement / Il y aura une erreur #1062

Mais d'après ce que j'ai pu comprendre en modifiant tinyint par autre chose ça devrait marcher, est-ce que tu vois mon problème depuis le code que j'ai mis plus haut ?