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 :

1364 Field 'id' doesn't have a default value [MySQL-5.7]


Sujet :

MySQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut 1364 Field 'id' doesn't have a default value
    Bonjour,
    J'utilise MySQL sous XAMPP
    De temps à autre, cette erreur s'affiche :
    1364 Field 'id' doesn't have a default value
    ma variable sql_mode est = NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION
    Des discussions indiquent que l'erreur serait liée aux modes STRICT_ALL_TABLES et/ou STRICT_TRANS_TABLES
    Comme je ne suis pas dans ce cas, quelle pourrait être l'origine de cette erreur ?
    Merci pour votre éclairage

  2. #2
    Membre éclairé Avatar de Chou-ette
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2018
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 57
    Par défaut
    Bonjour,

    Il nous faudrait la structure de la table en question pour pouvoir répondre, mais à priori, ce genre d'erreur se produit souvent lors d'un INSERT qui ne contiendrait pas toutes les valeurs NON NULL de la table.

  3. #3
    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 970
    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 970
    Par défaut
    Salut à tous.

    Quand je déclare une clef primaire, je mets ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `id`  integer unsigned  NOT NULL  AUTO_INCREMENT  PRIMARY KEY,
    Chaque valeur de la colonne doit être unique puisque c'est une clef primaire.
    Je mets donc "NOT NULL" pour signifier ce choix.
    Comme tu ne nous as pas donné la déclarative de ta colonne 'id', je suppose que c'est ce "NOT NULL" qui manque dans ta déclarative.

    "AUTO_INCREMENT" signifie qu'à chaque insertion, la valeur de cette colonne est augmenté de +1.
    Le type de la colonne est donc un nombre non signée "integer unsigned".

    Cordialement.
    Artemus24.
    @+

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `id`  integer unsigned  NOT NULL  AUTO_INCREMENT  PRIMARY KEY,
    Chaque valeur de la colonne doit être unique puisque c'est une clef primaire.
    Je mets donc "NOT NULL" pour signifier ce choix.
    Le type de la colonne est donc un nombre non signée "integer unsigned".
    @+
    Bonjour Artemus24, Chou-ette,
    J'utilise le composant SEBLOD pour Joomla. La table qui me pose problème est créée automatiquement par l'ajout d'un champ. Par défaut, elle comporte une clé primaire non incrémentée, non signée et non NULL.
    Quand j'ajoute des colonnes supplémentaires dans cette table, avec une requête du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE ma_table
      ADD `ma_colonne` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, ...
    L'erreur apparait d'abord sur l'id, puis sur les autres colonnes.

    Sous MySQL, j'observe que la "cardinalité" de la clé primaire = 2, alors le nombre de colonnes de la table = 35. La "cardinalité" n'évolue pas après l'exécution de la requête manuelle.
    Est-ce que cela pourrait être à l'origine de l'erreur ?
    Si oui, comment modifier la valeur de la cardinalité ?
    Alain

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Bonjour,
    Je vais clore cette discussion. L'erreur provient d'erreur de script SEBLOD, j'applique une méthode pour la fixer.
    Merci pour votre aide

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut Field 'id' doesn't have a default value
    Bonjour,
    J'ai recréé une base avec des tables vierge, après 2 insertions de ligne, l'erreur "Field 'id' doesn't have a default value" est de retour
    Je doute maintenant du bon fonctionnement de XAMPP !!!

    Pouvez-vous m'indiquer si la variable sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION, peut être à l'origine du problème ?

    Je lis sur des forums qu'il est nécessaire de remplacer la variable par ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_UBSTITUTION
    et surtout supprimer STRICT_TRANS_TABLES

    Quels sont vos avis, SVP
    Alain

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    Donne-nous du SQL à exécuter qu'on puisse voir. CREATE TABLE et INSERT.

  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 970
    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 970
    Par défaut
    Salut alainb .

    Je vous ai donné la solution, pourquoi vous n'en tenez pas compte ?

    Cordialement.
    Artemus24.
    @+

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 653
    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 653
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    @Alainb : il ne suffit pas de dire "j'ai tel message d'erreur de temps en temps", il faut préciser les éléments du contexte :
    • description exacte des tables en jeu, c'est à dire le script DDL avec les ordres CREATE TABLE
    • description exacte des requêtes provoquant l'erreur


    @Artemus24 : préciser "NOT NULL" sur une colonne PRIMARY KEY n'est pas utile : une clef primaire est par définition not null (contrairement à une simple contrainte unique, qui elle, peut optionnellement être "nullable").
    Pour rappel, la définition d'une PK c'est unique et not null et irréductible
    si c'est unique mais nullable, c'est une colonne avec contraint unique
    si c'est unique mais réductible, c'est une surclef

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Bonjour escartefigue, Artemus24
    Je suis bien embêté pour répondre à toutes vos demandes de précisions. Le site est construit avec Joomla!4, la table ci-dessous est créée avec le composant Seblod.
    A l'ajout d'un article, des champs sont ajoutés dans la table Content (id auto incrémenté) et dans la table gacil_cck_store_form_personne dont l'id est ajouté par un script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `gacil_cck_store_form_personne` (
      `id` int(10) UNSIGNED NOT NULL,
      `acte_date_gre` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
      `age` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
      `id_nom` int(11) DEFAULT NULL,
      `nom_nouveau` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
      `id_prenom` int(11) DEFAULT NULL,
      `id_genre` int(11) DEFAULT NULL,
      `id_cat_activite` int(11) DEFAULT NULL,
      `id_activite` int(11) DEFAULT NULL,
      `nai_date_gre` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 653
    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 653
    Billets dans le blog
    10
    Par défaut
    Cette table semble dépourvue de primary key

    Le plus souvent, la colonne nommée ID est justement dédiée à la PK, mais en ce cas, il est recommandé de laisser le SGBD en calculer la valeur.
    Pour ce faire, utilisez un AUTO_INCREMENT et ajoutez PRIMARY KEY comme suit :

    ID integer auto_increment primary key
    Puis ne citez pas la colonne ID dans l'ordre insert, c'est le SGBD qui affectera tout seul une nouvelle valeur unique à cette colonne.

    Encore une fois, inutile d'ajouter UNIQUE ou NOT NULL, une PK est toujours UNIQUE et NOT NULL, ce n'est pas moi qui le dit, c'est Chris Date, ainsi que tous les inventeurs du modèle relationnel

    Par ailleurs, il est curieux de trouver dans cette table un identifiant de nom, un identifiant de prénom et autres bizarreries...
    Je serai curieux de connaître les règles de gestion ayant conduit à cette modélisation, il y a probablement des erreurs.
    Egalement ce qui semble être une date de naissance, mais typée en varchar
    Et l'âge, en varchar aussi , mais surtout qui n'a rien à faire dans une table : l'âge doit être calculé en fonction de la date de naissance, mais pas stocké, c'est une source d'erreurs !

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Bonjour escartefigue,
    Oui, tu as raison sur bien des points. Je vais répondre à tes remarques.

    Cette table semble dépourvue de primary key
    C'est "normal", la table est une extension de la table "content" de Joomla

    J'ai plusieurs autres tables sur ce modèle. Une clé primaire avec auto incrément plantera le fonctionnement

    Puis ne citez pas la colonne ID dans l'ordre insert, c'est le SGBD qui affectera tout seul une nouvelle valeur unique à cette colonne.
    C'est Joomla qui insert

    Encore une fois, inutile d'ajouter UNIQUE ou NOT NULL, une PK est toujours UNIQUE et NOT NULL, ce n'est pas moi qui le dit, c'est Chris Date, ainsi que tous les inventeurs du modèle relationnel


    Par ailleurs, il est curieux de trouver dans cette table un identifiant de nom, un identifiant de prénom et autres bizarreries...
    Je serai curieux de connaître les règles de gestion ayant conduit à cette modélisation, il y a probablement des erreurs.
    Ces colonnes avec id enregistrent l'item sélectionné dans les listes du formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Également ce qui semble être une date de naissance, mais typée en varchar
    Vrai, j'ai fais ce choix parce que je ne sais pas gérer la situation suivante. La date peut être incomplète : année seule, année + mois...

    Et l'âge, en varchar aussi , mais surtout qui n'a rien à faire dans une table : l'âge doit être calculé en fonction de la date de naissance, mais pas stocké, c'est une source d'erreurs !
    Vrai, je vais remplacer VARCHAR par INT
    Mes données d'entrée sont la date d'un acte et l'age d'une personne (à la date de l'acte); de ces 2 données je peux calculer l'année de naissance.

    Alain

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 653
    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 653
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par alainb Voir le message
    Citation Envoyé par escartefigue Voir le message
    Cette table semble dépourvue de primary key
    C'est "normal", la table est une extension de la table "content" de Joomla
    J'ai plusieurs autres tables sur ce modèle. Une clé primaire avec auto incrément plantera le fonctionnement
    Si par "extension" il faut comprendre que c'est une spécialisation par héritage, alors la table issue du sous-type doit hériter de l'identifiant du sur-type
    On doit donc dans ce cas avoir également un type integer, mais évidemment sans auto_increment puisqu'on récupère la valeur du sur-type.

    Voici un exemple typique de MCD utilisant l'héritage : cas du sur-type "personne" avec deux sous-types, les personnes morales et les personnes physiques

    Nom : MCD.png
Affichages : 1704
Taille : 36,6 Ko

    Ce MCD donne automatiquement le modèle logique qui suit :

    Nom : MLD.png
Affichages : 1692
Taille : 47,1 Ko

    Et donc le script SQL suivant, dans lequel on voit bien que l'auto_increment ne s'applique qu'à la table issue du sur-type, les sous-types font référence à la valeur du sur-type au travers de contraintes FK.

    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
    CREATE TABLE PE_personne(
       PE_ident INT AUTO_INCREMENT,
       PE_dtcrea DATE NOT NULL,
       PRIMARY KEY(PE_ident)
    );
     
    CREATE TABLE PM_pers_morale(
       PE_ident INT,
       PM_SIREN CHAR(9) NOT NULL,
       PRIMARY KEY(PE_ident),
       FOREIGN KEY(PE_ident) REFERENCES PE_personne(PE_ident)
    );
     
    CREATE TABLE PP_pers_physique(
       PE_ident INT,
       PP_nom VARCHAR(50) NOT NULL,
       PP_prenom VARCHAR(50) NOT NULL,
       PP_ddn DATE NOT NULL,
       PRIMARY KEY(PE_ident),
       FOREIGN KEY(PE_ident) REFERENCES PE_personne(PE_ident)
    );


    Citation Envoyé par alainb Voir le message
    Citation Envoyé par escartefigue Voir le message
    Puis ne citez pas la colonne ID dans l'ordre insert, c'est le SGBD qui affectera tout seul une nouvelle valeur unique à cette colonne.
    C'est Joomla qui insert
    Je ne connais pas Joomla, mais j'ose espérer que quand la définition des tables sera corrigée, les ordres d'insertion le seront aussi



    Citation Envoyé par alainb Voir le message
    Citation Envoyé par escartefigue Voir le message
    Par ailleurs, il est curieux de trouver dans cette table un identifiant de nom, un identifiant de prénom et autres bizarreries...
    Ces colonnes avec id enregistrent l'item sélectionné dans les listes du formulaire
    Si ça signifie que le prénom est choisi parmi une liste de tous les prénoms et pareil pour les noms, alors c'est un fonctionnement très curieux, il faut avoir une liste exhaustive de tous les noms possibles, une autre pour tous les prénoms possibles...
    Si par "item sélectionné" il faut comprendre ligne du formulaire, alors, vu qu'on a deux identifiants différents (un pour le nom, un pour le prénom), on peut avoir deux valeurs différentes et donc pointer sur deux lignes différentes. Gros risque d'incohérence...

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Par défaut
    Bonjour,
    J'ai mis le doigt sur une incohérence lors de l'enregistrement des données, le chemin était mal écrit pour un de mes 2 formulaires.
    Depuis la correction, mes tests ne génèrent plus d'erreur
    Je ferme la discussion
    Merci encore pour votre échange d'infos, et merci escartefigue pour tes exemples.
    Alain

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

Discussions similaires

  1. [MySQL-5.5] Table storage engine for 'toto' doesn't have this option
    Par FredNV dans le forum Administration
    Réponses: 3
    Dernier message: 18/01/2017, 20h41
  2. Réponses: 2
    Dernier message: 30/05/2016, 14h38
  3. Field 'Nom' doesn't have a default value
    Par ArcTan dans le forum Hibernate
    Réponses: 11
    Dernier message: 06/06/2013, 16h59
  4. MyView doesn't have a primary key
    Par MarwenGafsi dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2011, 13h23
  5. [PowerBuilder] Datawindow doesn't have UPDATE...
    Par marie mouse dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 23/05/2005, 11h38

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