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 :

Champ unique mais vide au démarrage : Duplicate Entry [MySQL-5.0]


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 363
    Par défaut Champ unique mais vide au démarrage : Duplicate Entry
    Bonjour à tous,

    J'ai un champ SIRET vide déclaré en varchar(9) sans valeur par défaut, dans une table de 50 magasins sans SIRET.
    Je souhaite qu'il soit unique pour détecter les doublons à la mise à jour de ma table, je précise donc dans phpMyAdmin "Unique" et il me dit "Duplicate Entry".
    J'ai essayé de mettre NULL comme valeur par défaut, pareil.
    Comment permettre que tous les champs SIRET de ma table soient vides ET uniques, pour pouvoir modifier ma table magasin par magasin en contrôlant (ERR 1062) que l'utilisateur ne rentre pas deux fois le même SIRET, svp ?
    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    cf la doc : http://dev.mysql.com/doc/refman/5.5/...ate-table.html


    A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index permits multiple NULL values for columns that can contain NULL.

    Vous avez donc déjà des doublons de siret dans votre table, qui sont différent de "null".

  3. #3
    Membre éclairé
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 363
    Par défaut
    Ca c'est une bonne piste.
    Je contrôle. Merci.

    EDIT : j'ai supprimé le champ, je l'ai recréé NULL UNIQUE et ça a marché. je suppose que je mettais un ou plusieurs espaces dedans à un moment de mes tests.

  4. #4
    Membre éclairé
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 363
    Par défaut
    Hmmm... je rencontre un nouveau problème sur le même sujet, c'est pourquoi je n'ouvre pas un nouveau sujet.

    Ma table contient aujourd'hui 50 magasins avec 50 SIRET différents. So far so good comme disait Laetizia Buonaparte.
    Si j'ai une nouvelle création de magasin et que l'utilisateur ne met pas son SIRET, le champ est NULL comme avant. Ca colle (à moi de l'accepter ou non).
    Mais si j'en crée un 2e, toujours sans SIRET, MySQL se plaint d'une clé dupliquée valeur nulle alors que je n'ai PAS changé la table.
    Pourqoi, à votre avis, svp ?
    Merci.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Toulousaing Voir le message
    Mais si j'en crée un 2e, toujours sans SIRET, MySQL se plaint d'une clé dupliquée valeur nulle alors que je n'ai PAS changé la table.
    Pourqoi, à votre avis, svp ?
    Parce que MySQL est farci de tares de bugs et de bêtises et qu'il croit naïvement que quelque chose qui n'existe pas (NULL) peut être dupliqué; C'est une des nombreuses erreurs de conception de cet ersatz de SGBDR !

    A lire sur le sujet : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  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
    Citation Envoyé par SQLpro Voir le message
    Parce que MySQL est farci de tares de bugs et de bêtises et qu'il croit naïvement que quelque chose qui n'existe pas (NULL) peut être dupliqué
    Non, en l’occurrence, c'est un comportement propre à SQL Server, et normalement, MySQL ne commet pas cette erreur.

    Pouvez-vous nous fournir plus de détail ? script de création de la table et de l'index unique, et script d'insertion des lignes "dupliquées" ?
    Ainsi que le message d'erreur exact.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/04/2015, 12h00
  2. [WD16] Affectation d'un champ table mais vide
    Par Marcuss57 dans le forum WinDev
    Réponses: 2
    Dernier message: 23/02/2015, 17h11
  3. [MySQL] duplicate entry avec unique
    Par djoumusic dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/07/2008, 20h03
  4. Réponses: 8
    Dernier message: 23/01/2008, 22h59
  5. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40

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