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

PHP & Base de données Discussion :

Une colonne ne peut avoir deux lignes avec la même valeur. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut Une colonne ne peut avoir deux lignes avec la même valeur.
    Bonjour,

    Un site effectue une requête vers une page en lui transmettant des données. Ces données sont ensuite insérées dans une base de données, en vérifiant à chaque fois si la donnée n'est pas déjà insérée via un id unique associé à chaque donnée. Cela a l'air très basique mais je n'arrive pas à faire en sorte que l’insertion dans la base de données ne puisse se faire qu'une seule fois pour chaque id unique.

    En effet, j'ai constaté que parfois c'est inséré en double. Mon hypothèse est que dans de rares cas le site est ralenti ou la base de données trop utilisée. Les données sont alors réceptionnées par le site qui vérifie si elle ne sont pas déjà présente, ce qui n'est pas le cas. Avant que l'insertion dans la base de données soit faite, le site reçoit à nouveau les données, elles ne sont toujours pas présentes et sont alors enregistrées 2 fois.

    J'ai constaté qu'en général les enregistrements sont séparés d'une ou deux secondes.

    J'y réfléchis depuis un moment car ça a l'air simple mais je me retrouve à demander de l'aide car je ne sais vraiment pas comment procéder ...

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Quelle est la définition du champ ID ?

    Montre-nous la définition de ta table tant qu'on y est
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    La seule façon de garantir l'unicité d'une valeur dans une BDD c'est de mettre une contrainte unique sur la colonne ou le groupe de colonnes concernées.
    Cette contrainte peut être explicite (ajout du mot clef UNIQUE dans le DDL), ou implicite (dans le cas d'une contrainte PRIMARY KEY).
    Si l'unicité est contrôlée par traitement, alors des failles sont possibles, ne serait-ce qu'en raison des accès concurrents.

    A partir de là, le contrôle de doublon ne devrait pas être fait sur l'identifiant qui n'a qu'une vocation technique, mais sur une ou plusieurs colonnes fonctionnelles.

    Par exemple, dans une table des personnes physiques, je vérifie que le n° de sécurité sociale (sous réserve qu'il soit déclaré unique) est absent de la table
    S'il est absent, j'autorise l'insertion qui créera une nouvelle ligne dont la valeur d'identifiant technique sera nouvelle (et le plus souvent attribuée par le SFBD car c'est bien plus pratique)
    Si la combinaison existe déjà, je fais éventuellement des mises à jours d'autres attributs (situation maritale, orthographe du nom ou du prénom...)

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Bonsoir,

    Désolé du retard ...
    J'avais tenté de mettre la contrainte UNIQUE mais ça ne fonctionnait pas j'avais un message d'erreur à chaque fois. Je suis alors venu vous demander comment procéder car du coup j'étais persuadé que ce n'était pas ce que je devais utiliser. Plus tard j'ai eu la bonne idée de vérifier si certaines lignes sont présentes en double et bingo, une fois que chaque ligne est unique ... la contrainte UNIQUE a pu être mise en place.

    Désolé de vous avoir dérangé un peu pour rien. Cette fois le problème devrait être définitivement résolu.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/05/2021, 21h41
  2. Réponses: 5
    Dernier message: 22/04/2021, 19h51
  3. Réponses: 4
    Dernier message: 29/06/2017, 22h49
  4. [XL-2016] fusionner les deux lignes avec le même nom dans une colonne
    Par methos01 dans le forum Excel
    Réponses: 4
    Dernier message: 27/03/2017, 15h26
  5. Réponses: 2
    Dernier message: 22/10/2015, 11h23

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