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 :

requête avec valeur nulle


Sujet :

Requêtes MySQL

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut requête avec valeur nulle
    Bonjour à tous,

    voici la structure du champ me posant problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Champ  	Type 		Interclassement	Attributs	Null 	Défaut	Extra Action                 
       Longueur  	smallint(5)    				   	Oui  	NULL
    Première requête (longueur mise à NULL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO fungi2 VALUES ('','Kendrickiella phycomycoides','135459', 'NULL','TCCGTAGGTGAACCTGCGGAAGGATCATTACCGAGTGAGGGCCCTCTGGGTCCAACCTCCCACCCGTGTTTATTTACCTTGTTGCTTCGGCGAGCCTGCCTTTTGGCTGCCGGGGGACGTCAGTCCCCGGGTCCGTGCTCGCCGGAGACACCTTAGAACTCTGTCTGAAGATTGTAGTCTGAGATTAAATATAAATTATTTAAAACTTTCAACAACGGATCTCTTGGTTCCGGCATCGATGAAGAACGCAGCGAAATGCGATACGTAATGTGAATTGCAGAATTCAGTGAATCATCGAGTCTTTGAACGCACATTGCGCCCTCTGGTATTCCGGAGGGCATGCCTGTCCGAGCGTCATTGCTGCCCTCAAGCACGGCTTGTGTGTTGGGCCCCGTCCTCCTTCCGGGGGACGGGTCCGAAAGGCAGCGGCGGCACCGCGTCCGGTCCTCAAGCGTATGGGGCTTTGTCACTCGCTTTGTAGGCCTGGCCGGCGCTTGCCGATCAACCAAACTTTTTATCAAGGTTGACCTCGGAT','2009-2-12');
    Seconde requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Fungi2 SET Longueur = length(Sequence) WHERE longueur IS NULL;
    mais le champ longueur est à 0 et non à NULL. Je suppose que MySQL s'attend à avoir un chiffre et donc transforme les caractères NULL en 0.
    Est-ce aussi bien de faire dans ma seconde requête WHERE longueur = 0 au lieu de WHERE longueur IS NULL? Ou vaut-il mieux changer ma première requête?

    Seconde requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Fungi2 SET Longueur = length(Sequence) WHERE longueur = 0;

    Merci pour votre aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Comme NULL est la valeur par défaut, vous pouvez vous passer de préciser cette valeur dans l'INSERT.
    De plus, si vous insérez 'NULL', vous cherchez à insérer la chaîne de caractères 'NULL' dans une longueur qui est de type smallint. MySQL évalue la valeur que vous cherchez à insérer dans une colonne numérique et transforme la chaîne 'NULL' en 0. En fait il n'aurait pas dû accepter votre requête d'insertion puisque vous voulez insérer du texte dans une colonne numérique.

    Ecrivez plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO fungi2 VALUES ('', 'Kendrickiella phycomycoides', '135459',  NULL, 'TCCGTAGGTGAACCTGCGGAAGGATCATTACCGAGTGAGGGCCCTCTGGGTCCAACCTCCCACCCGTGTTTATTTACCTTGTTGCTTCGGCGAGCCTGCCTTTTGGCTGCCGGGGGACGTCAGTCCCCGGGTCCGTGCTCGCCGGAGACACCTTAGAACTCTGTCTGAAGATTGTAGTCTGAGATTAAATATAAATTATTTAAAACTTTCAACAACGGATCTCTTGGTTCCGGCATCGATGAAGAACGCAGCGAAATGCGATACGTAATGTGAATTGCAGAATTCAGTGAATCATCGAGTCTTTGAACGCACATTGCGCCCTCTGGTATTCCGGAGGGCATGCCTGTCCGAGCGTCATTGCTGCCCTCAAGCACGGCTTGTGTGTTGGGCCCCGTCCTCCTTCCGGGGGACGGGTCCGAAAGGCAGCGGCGGCACCGCGTCCGGTCCTCAAGCGTATGGGGCTTTGTCACTCGCTTTGTAGGCCTGGCCGGCGCTTGCCGATCAACCAAACTTTTTATCAAGGTTGACCTCGGAT', '2009-2-12')
    Ou bien encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO fungi2 VALUES ('', 'Kendrickiella phycomycoides', '135459',  , 'TCCGTAGGTGAACCTGCGGAAGGATCATTACCGAGTGAGGGCCCTCTGGGTCCAACCTCCCACCCGTGTTTATTTACCTTGTTGCTTCGGCGAGCCTGCCTTTTGGCTGCCGGGGGACGTCAGTCCCCGGGTCCGTGCTCGCCGGAGACACCTTAGAACTCTGTCTGAAGATTGTAGTCTGAGATTAAATATAAATTATTTAAAACTTTCAACAACGGATCTCTTGGTTCCGGCATCGATGAAGAACGCAGCGAAATGCGATACGTAATGTGAATTGCAGAATTCAGTGAATCATCGAGTCTTTGAACGCACATTGCGCCCTCTGGTATTCCGGAGGGCATGCCTGTCCGAGCGTCATTGCTGCCCTCAAGCACGGCTTGTGTGTTGGGCCCCGTCCTCCTTCCGGGGGACGGGTCCGAAAGGCAGCGGCGGCACCGCGTCCGGTCCTCAAGCGTATGGGGCTTTGTCACTCGCTTTGTAGGCCTGGCCGGCGCTTGCCGATCAACCAAACTTTTTATCAAGGTTGACCTCGGAT', '2009-2-12')
    Et ce qui serait carrément mieux, c'est de nommer les colonnes dans lesquelles vous voulez insérer des données, puisque en fait vous n'insérez pas de données dans toutes les colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO fungi2(col1, nom, col3, Sequence, dateenreg)
    VALUES ('', 'Kendrickiella phycomycoides', '135459', 'TCCGTAGGTGAACCTGCGGAAGGATCATTACCGAGTGAGGGCCCTCTGGGTCCAACCTCCCACCCGTGTTTATTTACCTTGTTGCTTCGGCGAGCCTGCCTTTTGGCTGCCGGGGGACGTCAGTCCCCGGGTCCGTGCTCGCCGGAGACACCTTAGAACTCTGTCTGAAGATTGTAGTCTGAGATTAAATATAAATTATTTAAAACTTTCAACAACGGATCTCTTGGTTCCGGCATCGATGAAGAACGCAGCGAAATGCGATACGTAATGTGAATTGCAGAATTCAGTGAATCATCGAGTCTTTGAACGCACATTGCGCCCTCTGGTATTCCGGAGGGCATGCCTGTCCGAGCGTCATTGCTGCCCTCAAGCACGGCTTGTGTGTTGGGCCCCGTCCTCCTTCCGGGGGACGGGTCCGAAAGGCAGCGGCGGCACCGCGTCCGGTCCTCAAGCGTATGGGGCTTTGTCACTCGCTTTGTAGGCCTGGCCGGCGCTTGCCGATCAACCAAACTTTTTATCAAGGTTGACCTCGGAT', '2009-2-12')
    Au passage, si la première colonne correspond à un identifiant entier auto-incrémenté, n'essayez pas non plus de lui passer une chaîne de caractères vide.

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Au passage, si la première colonne correspond à un identifiant entier auto-incrémenté, n'essayez pas non plus de lui passer une chaîne de caractères vide.
    Oui, c'est un identifiant auto-incrémenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO fungi2(id, organism, taxon, length, sequence, date) VALUES ( ,'Kendrickiella phycomycoides','135459', ,'TCCGTAGGTGACCTCGGAT','2009-2-13');
    #1064 - Erreur de syntaxe pr�s de ''Kendrickiella phycomycoides','135459', ,'TCCGTAGGTGAACCTGCGGAAG' � la ligne 1
    Cela ne fonctionne pas, il n'a pas l'air d'apprécier les champs vides. Si je remplace les valeurs de l'id par '' et celle de la longueur par NULL cela fonctionne. A quoi-cela est-il dû? dois-je modifier un paramètre dans MySQL? J'utilise EasyPHP 1.8



    Merci pour ton aide.


    nb : j'ai renommé le champ longueur length ainsi tous mes noms de champs sont en anglais.

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    La réponse est dans la FAQ MySQL .

    ced

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 390
    Points : 222
    Points
    222
    Par défaut
    Votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO fungi2(id, organism, taxon, length, sequence, date) VALUES ( ,'Kendrickiella phycomycoides','135459', ,'TCCGTAGGTGACCTCGGAT','2009-2-13');
    Faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO fungi2
    ( organism, taxon, .... ) 
    VALUES
    ( 'Kendrickiella hycomycoides','135459', ...);

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci pour votre aide, maintenant cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO fungi2(organism, taxon, length, sequence, date) VALUES ('Kendrickiella phycomycoides','135459', NULL,'TCCGTAGGCCTCGGAT','2009-2-13');
    0 h 0 min 29 sec

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    nb : j'ai renommé le champ longueur length ainsi tous mes noms de champs sont en anglais.
    Ca ce n'est pas une bonne idée car length est un mot du langage SQL !
    Donner au nom des colonnes des mots SQL est à éviter. Ca peut causer des erreurs d'interprétation.

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ca ce n'est pas une bonne idée car length est un mot du langage SQL !
    Donner au nom des colonnes des mots SQL est à éviter. Ca peut causer des erreurs d'interprétation.
    Oui, tu as raison, merci. Je l'ai renommé seq_length.

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

Discussions similaires

  1. Requête avec valeur nulle
    Par lodizzz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/05/2013, 16h28
  2. Calcul de stock avec valeure null
    Par nideux dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 11h10
  3. locate avec valeurs nulles
    Par lol_adele dans le forum Bases de données
    Réponses: 13
    Dernier message: 17/10/2005, 13h31
  4. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40
  5. Pb requete avec valeurs nulles
    Par James85 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/04/2004, 10h20

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