IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Probleme #1062 - Duplicate entry '0' for key 'PRIMARY'


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut Probleme #1062 - Duplicate entry '0' for key 'PRIMARY'
    Salut

    j'ai cette erreur, et je n'arrive ni à comprendre pourquoi elle arrive subitement (à priori) ni à résoudre.
    Du coup je ne peux pas faire de nouvelle entrée...

    Qui saurait m'aider..? Merci
    Nom : sample-dev-key.jpg
Affichages : 8501
Taille : 194,2 Ko

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 469
    Par défaut
    Bonjour,
    C'est tout simple: tu as un index unique sur Id, et tu tentes d'insérer une ligne dans cette table avec 0 pour cette colonne, alors qu'il y en a déjà une.

    Pour la résoudre, il faut affecter une autre valeur à cette colonne.

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 645
    Billets dans le blog
    10
    Par défaut
    Avec un peu de chance, l'id est de type autoincrémént, auquel cas il suffit de ne pas citer la colonne dans l'ordre insert pour que le SGBD affecte une nouvelle valeur

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Avec un peu de chance, l'id est de type autoincrémént, auquel cas il suffit de ne pas citer la colonne dans l'ordre insert pour que le SGBD affecte une nouvelle valeur
    euh...j'ai presque pas tout compris ... ^^ ID en auto : ok ...ne pas citer la colonne dans l'ordre INSERT ..? tu veux dire ' ' ..?

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 469
    Par défaut
    Il ne s'agit pas de mettre UNE valeur différente de 0, mais une valeur différente pour CHAQUE ligne. Chaque ligne de cette table doit avoir une valeur différente pour cette colonne.

    Pour la réponse de escartefigue, il suffit de ne pas spécifier la colonne lors de la requête INSERT.
    Par contre je doute qu'elle soit de type auto-incrément, vue la capture d'écran. Mais je ne connais pas PHPMYADMIN plus que ça (j'évite autant que faire se peut MySQL )

    Tatayo.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut
    Merci Tatayo...

    Oui j'entends bien que la valeur doit être différente ... la base sert à entrer des fiches nouvelles et différentes, donc bien reconnues avec leur propre ID...

    Avec l'auto-increment , j'ai cette réponse : #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '25170' for key 'PRIMARY'

    Ceci dit, l'insertion manuelle d'une valeur sur la clé fonctionne : le résultat est montré comme en défaut sur phpmyadmin , mais est enregistré dans la base avec toutes les valeurs placées...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    C'est tout simple: tu as un index unique sur Id, et tu tentes d'insérer une ligne dans cette table avec 0 pour cette colonne, alors qu'il y en a déjà une.

    Pour la résoudre, il faut affecter une autre valeur à cette colonne.

    Tatayo.
    Merci Tatayo...sauf que lorsque je mets une valeur en insert manuel autre que 0, le probleme reste le même. Je sais que j'ai réinjecté la table il y a pas suite au soucis OVH (idiot de ma part) et je pense ne pas avoir réaffecté les bonnes clés à chaque colonnes ..il doit en manquer..puisque la bdd fonctionnait pas mal il y a peu...

  8. #8
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 925
    Par défaut
    Salut à tous.

    Citation Envoyé par Chanteur06
    L'une de mes ligne, la 1ere, est en ID 0 ... ce que ne peut pas gérer SQL en AUTO_INC , il faut obligatoirement une ligne en valeur différente, au moins à 1
    En consultant le lien que vous nous avez donné sur le descriptif de votre table "resto", je constate que la clef primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      `id` int(10) unsigned NOT NULL,
    n'est pas auto incrémenté.

    Que votre colonne "id" contienne un 0 ou pas n'a aucune influence, vu qu'elle n'est pas auto incrémenté !

    Je vous communique un exemple pour transformer votre colonne "id" en colonne auto incrémenté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    drop table if exists `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`    integer unsigned  NOT NULL auto_increment primary key,
      `val`   char(10)              NULL default NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`id`,`val`) values (25, 'un'),(33, 'deux'),(75, 'trois'),(207, 'quatre'),(349, 'cinq'),(711, 'six'),(813, 'sept')
    --------------
     
    --------------
    select * from  `test`
    --------------
     
    +-----+--------+
    | id  | val    |
    +-----+--------+
    |  25 | un     |
    |  33 | deux   |
    |  75 | trois  |
    | 207 | quatre |
    | 349 | cinq   |
    | 711 | six    |
    | 813 | sept   |
    +-----+--------+
    --------------
    SELECT AUTO_INCREMENT as last_id
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  table_schema = 'base' and table_name = 'test'
    --------------
     
    +---------+
    | last_id |
    +---------+
    |     814 |
    +---------+
    --------------
    commit
    --------------
     
    --------------
    alter table `test` drop column `id`
    --------------
     
    --------------
    alter table `test` add  column `id` integer unsigned auto_increment not null primary key first
    --------------
     
    --------------
    describe `test`
    --------------
     
    +-------+------------------+------+-----+---------+----------------+
    | Field | Type             | Null | Key | Default | Extra          |
    +-------+------------------+------+-----+---------+----------------+
    | id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | val   | char(10)         | YES  |     | NULL    |                |
    +-------+------------------+------+-----+---------+----------------+
    --------------
    select * from  `test`
    --------------
     
    +----+--------+
    | id | val    |
    +----+--------+
    |  1 | un     |
    |  2 | deux   |
    |  3 | trois  |
    |  4 | quatre |
    |  5 | cinq   |
    |  6 | six    |
    |  7 | sept   |
    +----+--------+
    --------------
    SELECT AUTO_INCREMENT as last_id
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  table_schema = 'base' and table_name = 'test'
    --------------
     
    +---------+
    | last_id |
    +---------+
    |       8 |
    +---------+
    --------------
    set @rang := 10
    --------------
     
    --------------
    set @var = concat('alter table `test` auto_increment = ', @rang)
    --------------
     
    --------------
    PREPARE stmt FROM @var
    --------------
     
    --------------
    EXECUTE stmt
    --------------
     
    --------------
    DEALLOCATE PREPARE stmt
    --------------
     
    --------------
    SELECT AUTO_INCREMENT as last_id
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  table_schema = 'base' and table_name = 'test'
    --------------
     
    +---------+
    | last_id |
    +---------+
    |      10 |
    +---------+
    --------------
    commit
    --------------
     
    --------------
    insert into `test` (`val`) values ('huit'),('neuf')
    --------------
     
    --------------
    select * from  `test`
    --------------
     
    +----+--------+
    | id | val    |
    +----+--------+
    |  1 | un     |
    |  2 | deux   |
    |  3 | trois  |
    |  4 | quatre |
    |  5 | cinq   |
    |  6 | six    |
    |  7 | sept   |
    | 10 | huit   |
    | 11 | neuf   |
    +----+--------+
    --------------
    commit
    --------------
     
    --------------
    SELECT AUTO_INCREMENT as last_id
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  table_schema = 'base' and table_name = 'test'
    --------------
     
    +---------+
    | last_id |
    +---------+
    |      12 |
    +---------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut
    Merci Artemus24 , si tu regarde bien ma réponse, il y a un SQL qui indique l'AUTO-INC de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE xxx MODIFY ID int AUTO_INCREMENT;

  10. #10
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 925
    Par défaut
    Salut Chanteur06.

    Oui, je l'ai vu, mais modifier seulement l'auto incrément n'est pas suffisant. Pourquoi ?
    Parce que votre colonne "id" n'est pas auto incrémenté !

    Donc vous devez modifier la colonne "id" en la détruisant puis en la récréant avec l'option auto incrémenté, comme dans mon exemple.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/03/2014, 13h42
  2. #1062 - Duplicate entry '1' for key 'PRIMARY'
    Par milan2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/04/2012, 13h55
  3. [phpMyAdmin] #1062 - Duplicate entry '10123' for key 'PRIMARY'
    Par cobolons dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 19/07/2010, 13h55
  4. [SQL] 1062 - Duplicate entry '0' for key 1
    Par kervano dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 21/03/2008, 08h51
  5. [SQL] #1062 - Duplicate entry '1' for key 1
    Par gozu13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/02/2008, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo