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

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    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 : 7849
Taille : 194,2 Ko

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

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    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 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    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 du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    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...

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    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 ' ' ..?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    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.

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    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...

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    Par défaut un indice..?
    sur le dump que je fais, j'ai un affichage différent à ce jour en rapport d'une sauvegarde précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS `resto` (...) ENGINE=MyISAM AUTO_INCREMENT=25170 DEFAULT CHARSET=latin1;
    et aujourd'hui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE `resto` (...) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Vu qu'avec l'auto-increment , j'ai cette réponse :
    #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '25170' for key 'PRIMARY'
    ..y aurait il un début de réponse ici..? Merci ;-)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    Par défaut ALTER TABLE?
    ...si je fais un ALTER TABLE AUTO_INCREMENT= valeurquejeveux ... ça pointe les nouveaux ID à partir de cette valeur sans abimer les autres déjà en place..?

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Pouvez vous publier
    - le DDL complet : CREATE TABLE + ALTER TABLE éventuel
    - l'ordre INSERT complet

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Pouvez vous publier
    - le DDL complet : CREATE TABLE + ALTER TABLE éventuel
    - l'ordre INSERT complet
    sample table resto 2017.txtsample table resto 2018.txt


    Merci escartefigue

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    Par défaut on avance :-)
    J'ai trouvé (pas tout seul, http://www.nazmulhuda.info/set-auto_...ng-table-mysql )

    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

    Donc, si l'on a ce genre de soucis avec une erreur #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry 'xxx' for key 'PRIMARY' , il faut vérifier que la table ne comporte pas de ligne à 0 (zéro) et nettoyer au besoin avec :

    ALTER TABLE xxx AUTO_INCREMENT = le chiffre nécessaire;

    Associer la ligne en AUTO_INC : ALTER TABLE xxx MODIFY ID int AUTO_INCREMENT;

    Et ça doit bien faire avancer, voire régler le soucis. Pour moi c'est résolu...mais j'ai un autre soucis sur cette table, sur un autre post ^^

    Merci @escartefigue et @Tatayo

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    En effet, extrait de la doc V5.7 disponible ICI

    auto_increment_increment and auto_increment_offset are intended for use with master-to-master replication, and can be used to control the operation of AUTO_INCREMENT columns. Both variables have global and session values, and each can assume an integer value between 1 and 65,535 inclusive

  14. #14
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    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 380
    Points : 19 062
    Points
    19 062
    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...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Points : 65
    Points
    65
    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;

  16. #16
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    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 380
    Points : 19 062
    Points
    19 062
    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.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ 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