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

SQL Procédural MySQL Discussion :

[MySQL5] Champs Default, lors d'un INSERT


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut [MySQL5] Champs Default, lors d'un INSERT
    Bonjour,

    Dans le cadre d'une application non professionnel, j'ai créé des tables avec des valeurs par défaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE TABLE matable (id int primary key auto_increment, nom varchar(20) default 'Non renseigné');
    Comment obtenir la valeur par défaut ?

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO matable(nom) VALUES ('');
     
    // ou
     
    INSERT INTO matable(nom) VALUES (null);
    Après un Select * FROM matable;
    je peux voir que la valeur "non renseigné" n'a pas été prise en compte. Comment dois je procéder ?

    Merci,

    Shinn77, Till the End of Time

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    tu n'as pas de message d'erreur?

    sinon essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE matable (id int PRIMARY KEY AUTO_INCREMENT, nom varchar(20) NOT NULL DEFAULT 'Non renseigné');
    ou bien ajoute ta valeur par defaut dans un alter table mais normalement ca passe avec le CREATE du dessus.
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Par défaut
    Bonjour,
    le mot clé DEFAULT devrait convenir à ta situation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matable(nom) VALUES (DEFAULT)
    sur le site de mysql : http://dev.mysql.com/doc/refman/5.0/fr/insert.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name [(col_name,...)]
        VALUES ({expr | DEFAULT},...),(...),...
        [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

  4. #4
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE TABLE matable (id int PRIMARY KEY AUTO_INCREMENT, nom varchar(20) NOT NULL DEFAULT 'Non renseigné');
    Insertion :
    INSERT INTO matable VALUES ('', ''); => me retourne une nouvelle ligne avec nom vide
    INSERT INTO matable(nom) VALUES (''); => me retourne une nouvelle ligne avec nom vide
    INSERT INTO matable(nom) VALUES (null); => me retourne une erreur
    INSERT INTO matable() VALUES (); => me retourne une nouvelle ligne avec la valeur par défaut...

    Seulement c'est pas ce que je recherche... en effet mon but est que, dans une procédure stockée, faire un insert dans une table. Celle ci à des champs avec des valeurs par défaut si on les renseigne pas

    la requete serait du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO matable(champs1, champs2, champs3, champs4...)
    VALUES (param1, param2, param3, param4...);
    Si admettons que le champs3 a une valeur par défaut et que le params a été renseigner de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CALL Proc_spI_AjouterMatable ('param1', 'param2', '', 'param4'...);
    Dans ma table j'aurai pas la valeur par défaut de param3 mais "vide" => ''
    Ce qui me convient pas étant donné que j'ai mis les valeurs par défaut pour simplifier justement le traitement.

    je pourrais biensur tester mon champs mes paramètres dans ma procédure stockée via des IF et lancer des requêtes différentes si tel ou tel params avec des valeurs par défaut a été renseigné ou non. Mais si j'ai 20 champs, dont 8 en valeur par défaut non obligatoire, j vais avoir un paquer immense de IF et ca serait assez moche...

    Bref pour le moment ca marche pas

    Merci de votre aide et de ton aide.

    Shinn77

  5. #5
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    DEFAULT à la place de ta valeur non renseignée ou tu veux mettre la valeur par defaut
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  6. #6
    Membre averti Avatar de Shinn77
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Avec DEFAULT ca marche en revanche lors d'un insert ! merci ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matable (nom) VALUES (DEFAULT);
    Par contre dans ma procédures stockées j'ai une erreur de syntaxe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DELIMITER $$
     
    DROP PROCEDURE IF EXISTS `web75-shinn77`.`Proc_spI_AjouterRole` $$
    CREATE DEFINER=`web75-shinn77`@`%` PROCEDURE `Proc_spI_AjouterRole`(
      p_Nom  varchar(80)
    )
    BEGIN
      INSERT INTO Role(Nom)
      VALUES ( COALESCE(  NULLIF(  LOWER(p_Nom), ''),  DEFAULT) );
    END $$
     
    DELIMITER ;
    En tout cas merci j'ai appris quelque chose aujourd'hui

  7. #7
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    La valeur par default n'est pas insérée à la création, il y a zero ligne c'est normal, cette valeur est utilisé uniquement si tu appelles la valeur par defaut dans un update ou insert.
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/07/2009, 22h38
  2. [H2]Champ auto_increment lors d'un insert
    Par getz85 dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 03/10/2008, 13h41
  3. [MySQL] Gestion d'un champ auto_increment lors d'une insertion
    Par b_e_n_n dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/06/2008, 20h33
  4. interversion de champ lors d'1 insert
    Par fred0306 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/11/2006, 10h22
  5. Champs ignorés lors d'insertion par SQL Loader
    Par Bewitch dans le forum SQL*Loader
    Réponses: 3
    Dernier message: 13/09/2006, 11h19

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