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

 MySQL Discussion :

[newbie] insérer une valeur dans un champ


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Par défaut [newbie] insérer une valeur dans un champ
    Bonjour,

    J'ai un probléme lors de l'insertion de données dans une table!
    Disons que j'ai une table avec 2 champs:
    1 id int(9) primary auto-increment
    2 name varchar(256)

    Quand je veux insérer une nouvelle valeur j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `wp_sr_employees` (`name`) VALUES ('toke')
    Mais ca ne marche pas car phpMyadmin me dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1062 - Duplicate entry '' for key 2
    Ma question est comment dois je déclarer mon insert quand "id" est la clef et "autoincrement"?

    Sincérement
    Jean-Christophe

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Vous n'avez pas besoin de spécifier la valeur lorsque une colonne est de type auto incrément. Donc à priori, votre approche est la bonne.

    Fournissez le script de création de cette table pour y voir un peu plus clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE wp_sr_employees ;

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Par défaut
    Merci pour votre réponse vmolines

    La syntaxe est due á wordpress, mais la commande fonctionne puisque la table est crée dans la database, et mes tentatives d'insertion sont faites via phpMyadmin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if($wpdb->get_var("SHOW TABLES LIKE '$table_name_employees'") != $table_name_employees) {
    $sql = "CREATE TABLE " . $table_name_employees . " ( 
    id_employees bigint(11) NOT NULL AUTO_INCREMENT, 
    name VARCHAR(256) NOT NULL,
    ...
    UNIQUE KEY cellphone (cellphone),
    UNIQUE KEY email (email),
    PRIMARY KEY (id_employees)
    );";
    Sincérement
    Jean-Christophe

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Il faut que vous donniez le résultat complet de la commande "SHOW CREATE ..." . Exécuter cette commande SQL depuis PhpMyAdmin et donnez le résultat.

    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Par défaut
    C'est moi qui vous remercie!
    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
     
    CREATE TABLE `wp_sr_employees` (
     `id_employees` bigint(11) NOT NULL auto_increment,
     `name` varchar(256) NOT NULL,
     `title` bigint(11) NOT NULL,
     `workarea` varchar(256) NOT NULL,
     `tasks` varchar(256) NOT NULL,
     `responsibility_area` varchar(256) NOT NULL,
     `education` varchar(256) NOT NULL,
     `extraeducation` varchar(256) NOT NULL,
     `competencies` varchar(256) NOT NULL,
     `networks` varchar(256) NOT NULL,
     `publication` varchar(256) NOT NULL,
     `email` varchar(256) NOT NULL,
     `phone` varchar(256) NOT NULL,
     `cellphone` varchar(256) NOT NULL,
     `image_url` varchar(256) NOT NULL,
     `extrainformations` varchar(256) NOT NULL,
     PRIMARY KEY  (`id_employees`),
     UNIQUE KEY `cellphone` (`cellphone`),
     UNIQUE KEY `email` (`email`)
    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
    Sincérement
    Jean-Christophe

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Vous violez une contrainte d'unicité :
    Vous spécifiez que cellphone et email doivent être uniques, en plus d'être non nullable.

    Vous devez donc spécifier des valeurs pour toutes vos colonnes non nullables qui n'ont pas de valeur par défaut, et pour les colonnes ayant une contrainte d'unicité, vous assurer que la valeur que vous spécifiez n'existe pas déjà. dans la table

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par jean christophe Voir le message
    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
     
    CREATE TABLE `wp_sr_employees` (
     `id_employees` bigint(11) NOT NULL auto_increment,
     `name` varchar(256) NOT NULL,
     `title` bigint(11) NOT NULL,
     `workarea` varchar(256) NOT NULL,
     `tasks` varchar(256) NOT NULL,
     `responsibility_area` varchar(256) NOT NULL,
     `education` varchar(256) NOT NULL,
     `extraeducation` varchar(256) NOT NULL,
     `competencies` varchar(256) NOT NULL,
     `networks` varchar(256) NOT NULL,
     `publication` varchar(256) NOT NULL,
     `email` varchar(256) NOT NULL,
     `phone` varchar(256) NOT NULL,
     `cellphone` varchar(256) NOT NULL,
     `image_url` varchar(256) NOT NULL,
     `extrainformations` varchar(256) NOT NULL,
     PRIMARY KEY  (`id_employees`),
     UNIQUE KEY `cellphone` (`cellphone`),
     UNIQUE KEY `email` (`email`)
    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
    BIGINT pour un numéro d'employé ! C'est la plus grosse entreprise du monde, voire de la galaxie !
    BIGINT aussi pour title... c'est quoi title ? M. Mme, Mle, Me ?
    256 caractères partout, ça fait beaucoup aussi !
    Un nom de 256 caractères, ça doit plutôt être rare !
    Et je n'aimerais pas taper un numéro de téléphone à 256 chiffres !

    Bref, il est temps d'optimiser la taille des colonnes à des dimensions plus raisonnables !
    Et quand je vois des noms de colonnes au pluriel (competencies, networks, tasks...), j'ai l'impression qu'il y a là des colonnes multi données, ce qui est contraire à la première forme normale !
    Il semble donc qu'il faille aussi revoir la structure de la BDD !

    Quant au message d'erreur, comme l'a dit aieeeuuuuu, c'est dû au fait que vous ne donnez pas de valeur à des colonnes qui ont une contrainte d'unicité.
    La première insertion dans la table passe et attribue une chaîne vide par défaut à ces colonnes. La seconde insertion essaie de faire pareil et comme la chaîne vide existe déjà, ça viole la contrainte d'unicité et l'insertion est rejetée.
    Les colonnes minimum requises pour une insertion dans cette table sont cellphone et email.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/07/2014, 11h47
  2. [WD19] Insérer une valeur dans un champ Table
    Par Térence01 dans le forum WinDev
    Réponses: 7
    Dernier message: 06/05/2014, 10h07
  3. Probléme pour insérer une variable dans un champs
    Par BOUTRAIS dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 22h45
  4. Renvoi d'une valeur dans un champ avec un style
    Par m@thieu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/11/2005, 18h09
  5. Conserver une valeur dans un champs
    Par zakfa dans le forum IHM
    Réponses: 5
    Dernier message: 04/10/2004, 08h48

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