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

Langage SQL Discussion :

insert avec un id en auto-increment


Sujet :

Langage SQL

  1. #1
    Membre expert

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    7 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 7 288
    Points : 3 149
    Points
    3 149
    Billets dans le blog
    1
    Par défaut insert avec un id en auto-increment
    Bonjour,

    j'ai créé une table (MySQL) dont la première colonne est un ID en auto-increment :

    Code sql : 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
     
     
    DROP TABLE IF EXISTS `license`;
    CREATE TABLE IF NOT EXISTS `license` (
      `id` smallint(11) NOT NULL AUTO_INCREMENT,
      `id_SESA` int(6) DEFAULT NULL,
      `alternate_id` varchar(10) COLLATE utf8_bin DEFAULT NULL,
      `platform` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `platform_owner` int(6) DEFAULT NULL,
      `publisher` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `application_name` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `HFMCODE` varchar(10) COLLATE utf8_bin DEFAULT NULL,
      `Currently_active` varchar(5) COLLATE utf8_bin DEFAULT NULL,
      `Activate_date` date DEFAULT NULL,
      `Deactivate_date` varchar(2) COLLATE utf8_bin DEFAULT NULL,
      `Group_name` varchar(2) COLLATE utf8_bin DEFAULT NULL,
      `Office_Country` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Firstname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Lastname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Company_name` varchar(30) COLLATE utf8_bin DEFAULT NULL,
      `Job_code` varchar(5) COLLATE utf8_bin DEFAULT NULL,
      `Reporting_entity` varchar(5) COLLATE utf8_bin DEFAULT NULL,
      `Business_unit_name` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Location` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Internet_Address` varchar(50) COLLATE utf8_bin DEFAULT NULL,
      `Manager_firstname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Manager_lastname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `Manager_email` varchar(50) COLLATE utf8_bin DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    Pour y insérer un nouvel enregistrement, je fais une requête de ce genre : INSERT INTO `license` VALUES('','100008','(none)','Software Engineering','69723','CollabNet','TeamForge_Full','','TRUE','2018-07-26','','','France','Bilhel','Ben Abdellah','Schneider Electric France','','','','','','','','')J'ai ce message d'erreur :
    #1366 - Incorrect integer value: '' for column 'id' at row 1
    Comment faudrait-il faire ? Merci.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  2. #2
    Expert éminent
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 082
    Points : 9 566
    Points
    9 566
    Par défaut
    Bonjour,
    A mon avis vu que tu ne précise pas la liste des colonnes, MySQL les prend dans l'ordre de création de la table.
    Donc la première valeur est affectée à la première colonne: l'ID.
    Il faut donc ajouter la liste des colonnes dans la requête.
    Et pour moi, il faut TOUJOURS mettre la liste des colonnes. Si ton schéma change (pour une raison ou une autre), soit ta requête ne fonctionne plus, soit elle insère les mauvaises valeurs dans les mauvaises colonnes.

    Tatayo.

  3. #3
    Membre expert

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    7 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 7 288
    Points : 3 149
    Points
    3 149
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse. L'insertion a fonctionné en mettant le nom de chaque colonne, mais en ne mettant pas l'ID (si je le mettais, même message d'erreur qu'avant) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `license` (id_SESA,alternate_id,platform,platform_owner,publisher,application_name,HFMCODE,Currently_active,Activate_date,Deactivate_date,Group_name,Office_Country,Firstname,Lastname,Company_name,Job_code,Reporting_entity,Business_unit_name,Location,Internet_Address,Manager_firstname,Manager_lastname,Manager_email) VALUES('100008','(none)','Software Engineering','69723','CollabNet','TeamForge_Full','','TRUE','2018-07-26','','','France','Bilhel','Ben Abdellah','Schneider Electric France','','','','','','','','')
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  4. #4
    Expert éminent
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 082
    Points : 9 566
    Points
    9 566
    Par défaut
    Effectivement, j'aurai du être plus explicite:
    Il faut systématiquement mettre dans une requête INSERT la liste des colonnes pour lesquelles une valeur va être affectée, les autres "récupèrent" alors leur valeur par défaut (définie dans la structure de la table).
    Dans ton exemple la colonne Id récupère alors un auto-incrément, et d'autres colonnes éventuellement absentes un NULL.

    Tatayo.

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

Discussions similaires

  1. [DERBY] Insert avec un auto-increment sur la table
    Par cashmoney dans le forum JDBC
    Réponses: 3
    Dernier message: 15/09/2009, 16h11
  2. [TRIGGER] insertion avec clef auto-increment dupliquer
    Par TheBlackReverand dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 27/03/2009, 13h06
  3. Réponses: 1
    Dernier message: 25/09/2006, 11h18
  4. [SQL Server] INSERT avec clef sur n° auto
    Par Monstros Velu dans le forum Langage SQL
    Réponses: 9
    Dernier message: 31/03/2006, 18h54
  5. [EJB2.1 Entity] [CMP] [MySQL] Problème avec clé primaire en auto increment
    Par tery dans le forum Java EE
    Réponses: 6
    Dernier message: 16/07/2004, 12h28

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