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

Administration MySQL Discussion :

Champ Auto Increment


Sujet :

Administration MySQL

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut Champ Auto Increment
    Salut tout le monde,

    Je cherche à utiliser un champ auto increment dans une table , mais je voudrais qu il est le comportement suivant:

    Quand j insère une ligne , il génère un numéro unique... (jusque là rien de bien anormal)
    Mais je voudrais que quand je supprime une ligne et que j'en insere une autre , il réutilise la valeur laisser libre.

    Merci d avance.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    En principe, ceci n'est pas un comportement "normal" et ce, quel que soit le SGBD (pas seulement MySQl) pour une raison toute simple: comme son nom l'indique, un identifiant sert à identifier un élément de manière unique. Si on supprime un élément et qu'on réutilise son identifiant, cela revient à remplacer les données de l'ancien enregistrement par un autre.

    Prennons un cas concret: dans une administration, on identifie une personne par son numéro de dossier. Imaginons que le dossier d'une personne soit détruit et son numéro réutilisé, qu'ensuite un agent administratif souhaite accéder au dossier de la première personne (il ne sait pas que le dossier a été effacé). Au lieu d'avoir un message d'erreur "ce dossier n'existe pas", il accèdera à un autre dossier et risque de corrompre ses informations. Placé dans un autre contexte, on arrive au même type d'incohérences...

    En conclusion: n'essaye pas de réutiliser un ancien identifiant car c'est tout bonnement stupide ! (surtout si c'est soit-disant pour "gagner de la place" dans ta base...)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Non ce n est absolument pas pour gagner de la base dans la base de données.... le serveur a de la marge...

    Je t'explique plus en détail ce que je veut faire.

    En gros je dois générer un code barre et à ce code barre je dois associer temporairement certaine informations (ça m'évite davoir un code barre de 500 caratère). En effet je compte me servir du numéro du champ auto increment pour faire le code barre.

    Le truc c'est que une fois que ce code barre est fini d'être utiliser je veux pouvoir l'effacer de la base de données, pour pouvoir me resservir du code.

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Je ne vois pas en quoi ça change le problème: si t'as de la marge, tu continues d'utiliser ta séquence, même en cas de suppresion d'inergistrements.

    Sinon, pour répondre à ta question (si j'y réponds pas, je sent que tu vas pas me lacher, même si je te dis que c'est pas bien ce que tu fais), si tu vides ta table, tu peux toujours tenter un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE matable
    AUTO_INCREMENT=1
    sinon, tu adaptes en positionant le AUTO_INCREMENT à la valeur de MAX(identifiant)+1 (faire un SELECT pour trouver cette valeur), mais avec d'autres problèmes (synchronisation).

    Par contre, je ne sais pas si MySQL t'autorise à revenir en arrière comme ça...

    Sinon, si c'est pour identifier un produit de façon temporaire, pourquoi ne pas utiliser une fonction de hashage pour générer ton code-barre? Tu utilises une fonction de hashage sur les données de ton objet, cela te renvoie un numéro que tu insères dans un champ de type UNIQUE dans ta table. Si une erreur se produit parce que le numéro existe déjà (t'as quand même plus de chances de gagner au Loto...), alors tu génères un autre numéro en changeant une variable (le temps, par exemple).

    Pour ta fonction de hashage, tu peux utiliser la fonction MD5 par exemple, mais personnellement, je préfère encore la solution d'une séquence sans remise à zéro... (surtout que ça met moins de temps!)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    si j'y réponds pas, je sent que tu vas pas me lacher
    Vas Y t as qu a me dire que je suis un boulet ... Désolé de poser des questions sur le forum !!!!!

    Je garde ma solution de l'auto increment.
    Merci quand meme.

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par rvzip64
    si j'y réponds pas, je sent que tu vas pas me lacher
    Vas Y t as qu a me dire que je suis un boulet ... Désolé de poser des questions sur le forum !!!!!
    Mais non ! Je voulais pas t'offenser !

    Ce que je voulais dire, c'est:
    - je suis pas trop d'accord avec le fait de réutiliser des identifiants (surtout quand "le serveur a de la marge", comme tu dis)
    - je réponds quand même à ta question (mais j'émet des réserves. J'ai le droit, non?)

    Désolé, je manque parfois de diplomatie...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ah oui, y'a encore plus simple (j'y pense seulement maintenant), pour vider la table, tu fais juste un :
    C'est l'équivalent d'un DROP suivi d'un CREATE avec les paramètres d'origine. Du coup, ton champs id est automatiquement remis à zéro, comme ça c'est encore plus simple !
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Nickel je te remercie, mais comme tu me l'as si bien conseillé , je vais laisser mysql gerer le champ auto increment tout seul.

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

Discussions similaires

  1. zerofill pour champ auto-increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/07/2004, 15h52
  2. champ auto increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2004, 16h12
  3. Champ auto increment
    Par webbulls dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/04/2004, 16h07
  4. Remise à zero champ auto-incrementé (SQL Server)
    Par James85 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/01/2004, 09h23
  5. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30

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