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 :

comment obtenir une chaine aléatoire pour une clé primaire ?


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut comment obtenir une chaine aléatoire pour une clé primaire ?
    Bonjour (encore ^^)
    J'aimerais créer une clé primaire en char(10) aléatoire sous MySQL.
    C'est pour ma table client, l'auto-incrément sur un INT je trouve ça moisi à force de l'utiliser !
    Existe-t-il un format spécial pour avoir une clé aléatoire unique sous MySQL ?
    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 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par thor76160 Voir le message
    j'aimerais créer une clé primaire en char(10) aléatoire sous MySQL.
    c'est pour ma table client, l'auto-incrément sur un INT je trouve ça moisi à force de l'utiliser !
    C'est pourtant la meilleure clé primaire !
    Voir cet article de SQLPro.

    Du coup :
    existe-t-il un format spécial pour avoir une clé aléatoire unique sous MySQL ?
    J'en sais rien ! Ne cherche pas !

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    existe-t-il un format spécial pour avoir une clé aléatoire unique sous MySQL ?
    Non, évidemment, pour les raisons soulignées par Phil.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    A ma connaissance, il n'y a pas de fonction native en MySQL qui permette de générer une clé aléatoire unique. Mais tu peux générer des chaînes aléatoires en utilisant des fonctions comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSTR(MD5(RAND()), 1, 10)
    Il te reste à assurer l'unicité que tu peux gérer au niveau de ton code applicatif.

    Rachid A.

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par mydb_server Voir le message
    Il te reste à assurer l'unicité que tu peux gérer au niveau de ton code applicatif.
    Horresco referens ! Un index unique fera beaucoup mieux l'affaire.

    Mais encore une fois, je ne vois pas l'intérêt de la chose. Cette clef sera compliquée à générer, il faudra assurer son unicité par ailleurs, et au final elle sera sous-performante pour les recherches ou jointures.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    en mysql ce n'est apparemment pas possible.
    mais il existe une petite fonction pour sqlserver ainsi que pour d'autres produits microsoft, le GOUID. Ca permet d'avoir une chaîne aléatoire de chiffres et de lettres d'une longueur de 32 bits, ce qui offre des milliards de possibilités et l'assurance de ne jamais tomber 2 fois sur la même. Ca c'est de la clef primaire, bien meilleur qu'un auto incrément ! en effet, si je disais à mon client que son code client est "1", il ferait une sale tête xD

    merci pour vos infos

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par thor76160 Voir le message
    ca permet d'avoir une chaine aléatoire de chiffres et de lettres d'une longueur de 32 bits, ce qui offre des milliards de possibilités et l'assurance de ne jamais tomber 2 fois sur la même.
    FAUX !
    Le risque d'avoir deux fois la même chaîne générée n'est pas nul !

    ça c'est de la clef primaire, bien meilleur qu'un auto incrément !
    FAUX !
    Voir l'article de SQLPro sur la qualité d'une bonne clé. En plus je me rends compte que j'ai déjà recommandé la lecture de cet article !
    Au fait, tu peux nous dire pourquoi tu trouve ça "moisi à force de l'utiliser" la clé primaire auto-incrémentée ?
    Le traitement sur un entier est beaucoup plus rapide et le stockage est beaucoup moins gourmand (4 octets par numéro).

    en effet, si je disais à mon client que son code client est "1", il ferait une sale tête xD
    La clé primaire n'a pas vocation a être utilisée comme donnée à l'utilisateur et encore moins au client ! Elle ne sert que d'identifiant interne à la BDD pour les index et les clés étrangères.
    Relire l'article cité précédemment !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 9
    Points
    9
    Par défaut clef aléatoire ou incrémentielle ?
    Effectivement la clef incrémentielle est bien meilleure d'un point de vue accessibilité, mais pour certaines utilisations elle peut présenter une faille de sécurité.

    Si on utilise un telle clef dans un lien sur un mail, on peut facilement se la faire pirater alors qu'une clef aléatoire de type UUID() est bien plus sûre
    c'est un nombre sur 128 bit. Si on a une base avec 1 millions d'abonnés (très rare !!) on a 1 chance sur des milliards de trouver une bonne clef !!!

    voir http://dev.mysql.com/doc/refman/5.0/...functions.html
    et rechercher UUID

    Donc l'astuce c'est de créer un index de type VARCHAR de longueur 36 et de mettre comme valeur par défaut : (SELECT UUID())

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Tu ne viendras pas pleurer quand tu verras la dégradation des performances de ta BDD quand tu auras 1 million de lignes dans une table avec une telle mauvaise clé primaire !

    Arguments déjà donnés plus haut, je ne vais pas répéter.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 904
    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 : 21 904
    Points : 51 649
    Points
    51 649
    Billets dans le blog
    6
    Par défaut
    J'adore le niveau de culture voisin du néant absolu de ce forum....

    Chaque fois que j'ai cinq minutes, je lis les post de MySQL pour me détendre.

    Ca me fait toujours plaisir de rigoler aux inepties que les internautes racontent ici !

    Depuis plusieurs années, je ne poste presque plus de conseils ici tant les personnes qui fréquentent ce forum sont pour le moins obtus à bouché !

    Encore une brillante démonstration de la pauvreté intellectuelle sous-jacente à MySQL.

    A force de populariser de tels outils on en arrive a diffuser des informations de plus en plus stupides. Ce que les spécialistes des foules internautiques appellent les experts néophytes... Ils vous donne des tartines de leçons parce qu'ils ont réussi à aligner trois bout de code qui font "maman" !!!

    Alors juste pour amender ma tirade, voici ce que provoque l'usage stupide de GUID comme clef d'une base de données :
    http://blog.developpez.com/sqlpro/p7...nt-le-verdict/

    A +

    PS : avec ce que j'ai dit, si le post reste plus de 10 minutes, va falloir que je file faire un loto !

  11. #11
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je pense que le problème c'est qu'il y a des informaticiens qui ne font pas la différence entre une chaine "arbitraire" et une chaine "aléatoire".

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 904
    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 : 21 904
    Points : 51 649
    Points
    51 649
    Billets dans le blog
    6
    Par défaut
    Si ce n'étais que cela !!!!! ;-)

    A +

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    PS : avec ce que j'ai dit, si le post reste plus de 10 minutes, va falloir que je file faire un loto !
    t'as gagné ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/12/2013, 18h49
  2. Réponses: 42
    Dernier message: 22/09/2010, 12h57
  3. Comment obtenir offset de String dans une chaine
    Par L4BiN dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 09/07/2009, 13h42
  4. Réponses: 7
    Dernier message: 12/05/2008, 17h59
  5. Réponses: 15
    Dernier message: 26/03/2006, 12h10

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