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 :

Saut occasionnel pour une variable auto_increment


Sujet :

MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    Par défaut Saut occasionnel pour une variable auto_increment
    Bonjour,

    J'ai développé un site web en PHP qui est lancé depuis peu et j'ai de nouveaux inscrits tous les jours. Le formulaire d'inscription est relativement complexe et il m'a fallu pas mal de temps pour corriger les différents soucis de compatibilité. Par contre je remarque en regardant la base de données des sauts occasionnels dans les valeurs du champ ID. Du coup je me demandais si ce n'était pas dû à des échecs d'inscription. Hier, j'ai remarqué pour la première fois depuis le lancement du site un vrai cas d'échec d'inscription: une entrée vide avec juste un champ ID rempli. Ca doit faire environ un cas sur 50 si on considère que les sauts dans la valeur du ID ne sont pas également dû à des échecs.

    Je suis conscient que je ne donne pas énormément d'informations mais je ne sais pas trop ce qui vous serait utile, par contre je serais ravi de répondre à vos questions. Je ne suis pas contre des réponses purement théoriques. La question est donc de savoir si c'est normal qu'il y ait des sauts dans la valeur d'un champ de type "int auto_increment". Je précise aussi qu'aucune des valeurs n'a été effacée car je suis le seul à avoir accès à la base de données et il n'y a aucune instruction DELETE dans le code du site.

    Merci

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

    Les attributs de type "auto_incrément" sont attribués par le SGBD. Leur vocation est de garantir l'unicité de l'identifiant primaire et leur concision pour optimiser les performances.
    Il s'agit d'attributs purement techniques. La valeur de l'incrément ne doit jamais être utilisée à des fins fonctionnelles et surtout pas interprétées comme un rang : les valeurs peuvent être commitées dans un ordre différent de celui selon lequel elles ont été distribuées, voire, jamais commitées.
    C'est pourquoi les "trous" de numérotations sont tout à fait normaux et fréquents.

    Par contre, ce qui n'est pas normal, c'est de commiter une ligne avec seulement un id, ça signifie qu'il y a des INSERT sans alimentation des colonnes de la table. Vérifiez donc les ordres INSERT et l'alimentation des host-variables qui les précèdent...

    Enfin les DELETE n'ont rien à voir dans votre souci, DELETE supprime une ou des lignes dans leur totalité, pas le contenu des colonnes !

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut dré kam.

    Citation Envoyé par dré kam
    La question est donc de savoir si c'est normal qu'il y ait des sauts dans la valeur d'un champ de type "int auto_increment".
    "Normal" ne veut rien dire car cela dépend du contexte où vous faites vos insertions.

    Sans même parler de suppression de lignes, il faut savoir que dans le cadre d'une transaction, la colonne "id" sera incrémenté dans tous les cas, que ce soit lors de la validation (commit) de la ligne, ou que ce soit lors du rejet (rollback) de cette même ligne.
    Donc a priori, les "trous" sont normaux !

    Maintenant, il se peut que le problème vienne de la façon dont vous gérez les nouvelles inscriptions.
    Je suppose que vous faites une insertion partielle sur la première page web, puis vous la complétez par la suite sur les autres pages.
    Si l'utilisateur pour une raison ou une autre décide de ne termine pas sa validation, alors vous faites un rollback, c'est-à-dire un rejet.
    Ce n'est pas la bonne façon de procéder.
    Vous devez stocker la totalité des informations dans php et lors de la validation définitive, donc sur la dernière page web, vous devez faire votre insertion définitive puis un "commit".

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par escartefigue Voir le message
    Par contre, ce qui n'est pas normal, c'est de commiter une ligne avec seulement un id, ça signifie qu'il y a des INSERT sans alimentation des colonnes de la table.
    Pire, cela signifie aussi que toutes les colonnes de la tables acceptent le NULL, ce qui est sans aucun doute une erreur de modélisation.

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

Discussions similaires

  1. Obtenir le nombre de valeurs non manquantes pour une variable
    Par marie mouse dans le forum SAS Base
    Réponses: 5
    Dernier message: 14/12/2007, 17h33
  2. Masquer des items pour une variable d'un tableau croisé dynamique en VBA
    Par Pietro_L dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/10/2007, 16h35
  3. UnboundLocalError pour une variable
    Par piotrr dans le forum Général Python
    Réponses: 3
    Dernier message: 04/04/2007, 12h49
  4. 2 valeurs possibles pour une variable : méthode Seek
    Par Corinne4775 dans le forum Access
    Réponses: 8
    Dernier message: 12/02/2007, 19h00
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h22

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