begin process at 2010 03 14 08:59:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > MYSQL : CRÉATION D'UN GUID

MYSQL : CRÉATION D'UN GUID


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :mysql, guid, identifiant, unique Niveau :Débutant Date de création :04/01/2008 Vu :8 687

Auteur : maitredede

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


 Description

Ceux qui fonctionnent avec des technologies Microsoft savent ce qu'est un Guid. C'est un code unique (hexadécimal, sur 32 caractères) qui peut servir d'identifiant dans une table (comme un champ auto_increment).

Voici un exemple de fonction pour créer un Guid.

Source

  • DROP FUNCTION IF EXISTS `CreateGUID`;
  • DELIMITER ;;
  • CREATE FUNCTION `CreateGUID`() RETURNS VARCHAR(32)
  • NOT DETERMINISTIC READS SQL DATA
  • BEGIN
  • DECLARE i TINYINT(1) DEFAULT 1;
  • DECLARE strValid VARCHAR(16) DEFAULT '0123456789ABCDEF';
  • DECLARE guid VARCHAR(32) DEFAULT '';
  • DECLARE pos TINYINT(2);
  • REPEAT
  • SELECT FLOOR(1 + RAND() * (LENGTH(strValid) - 1)) INTO pos;
  • SELECT CONCAT(guid, SUBSTR(strValid, pos, 1)) INTO guid;
  • SELECT i + 1 INTO i;
  • UNTIL i > 32 END REPEAT;
  • RETURN guid;
  • END;;
  • DELIMITER ;
DROP FUNCTION IF EXISTS `CreateGUID`;
DELIMITER ;;
CREATE FUNCTION `CreateGUID`() RETURNS VARCHAR(32)
NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE i TINYINT(1) DEFAULT 1;
DECLARE strValid VARCHAR(16) DEFAULT '0123456789ABCDEF';
DECLARE guid VARCHAR(32) DEFAULT '';
DECLARE pos TINYINT(2);
REPEAT
SELECT FLOOR(1 + RAND() * (LENGTH(strValid) - 1)) INTO pos;
SELECT CONCAT(guid, SUBSTR(strValid, pos, 1)) INTO guid;
SELECT i + 1 INTO i;
UNTIL i > 32 END REPEAT;
RETURN guid;
END;;
DELIMITER ;

 Conclusion

Peut être utile pour les projets fonctionnant en .NET/MySql.


 Sources du même auteur

MYSQL : FONCTION POUR GÉRER DES COMPTEURS ÉQUIVALENT AUX SÉQ...

 Sources de la même categorie

CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE... par wissemhabboub
INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN... par fabrice69
AJOUTER/SUPPRIMER/LISTER UN COMMENTAIRE À UN CHAMP D'UNE TAB... par NHenry

 Sources en rapport avec celle ci

Source avec Zip (SQL SERVER) REQUÊTE POUR RECHERCHER UN {GUID} DANS TOUS LES... par lassaad83
INTERPRETEUR BRAINFUCK par coucou747
NO HTML BALISE [MYSQL] par abdoulax
MYSQL : FONCTION POUR GÉRER DES COMPTEURS ÉQUIVALENT AUX SÉQ... par maitredede
MYSQL BASE DE DONNÉE DEPARTEMENT par cerede2000

Commentaires et avis

Commentaire de FENETRES le 07/01/2008 12:27:42

Afin d'assurer une forte probabilité d'unicité, il me semble qu'un GUID est calculé d'après l'adresse MAC. Ce qui n'est visiblement pas le cas avec cette source !

Commentaire de maitredede le 08/01/2008 11:19:37

Il y a effectivement plusieurs algo de calcul de Guid. Certains sont fait à partir d'une adresse MAC, d'autres à partir de la date/heure...
La probabilité de conflits sur une génération aléatoire reste faible.
D'autant plus que, sans modules complémentaires, il n'est pas possible de récupérer une adresse MAC depuis mysql...

Après, tu peux coder un module qui fait appel à l'OS pour générer des Guid...

Commentaire de yopai_v le 30/11/2008 08:51:29

2 petits avertissements pour les néophytes en .NET/Mysql qui tomberaient sur cette source.

L'ambiguïté potentielle (pour quelqu'un qui lirait un peu vite sans chercher à comprendre, ce qui n'est pas une bonne chose) de la phrase "un GUID est un code unique, qui peut servir d'identifiant dans une table (comme un champ auto_increment)." : cela ne veut pas dire que l'on peut stocker un GUID dans un champ auto_increment. Soit on utilise un champ INT auto_increment, soit un "bête" champ VARCHAR(32) dans lequel on va stocker explicitement les GUID que l'on génère.

Sur le plan théorique, j'ai une réserve à l'encontre de cette source : il me semble plus judicieux de faire générer le GUID par l'applicatif que par la base de données. D'une part parce que les routines existent déjà, censées fournir un meilleur GUID qu'un simple random; d'autre part parce que c'est l'applicatif qui "sait" ce qu'est un GUID. Et il est toujours mieux, si vous voulez construire une application robuste et lisible, de concentrer la gestion d'un objet dans la partie du système qui "sait" ce qu'est l'objet.

Il ne s'agit bien sûr que d'une réserve théorique, et il se peut que cette source trouve son utilisation justifiée dans un contexte donné. Mais un avertissement me semblait nécessaire pour éviter qu'un débutant en .NET/Mysql ne tombe sur cette source et utilise cette solution pour générer un GUID là où un appel .NET aurait suffi et aurait été préférable (appel qu'il serait intéressant d'expliciter ici, si quelqu'un connaît la fonction à appeler).

Commentaire de Xantra le 23/06/2009 02:59:08

Très intéressant, mais j'arrive pas a le faire marcher :
Copier collé dans l'exécution SQL de phpmyadmin et erreur sur la 2eme ligne, et c'est pas la seul.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Mysql - Unicité de plusieurs champs [ par fone ] Bonjour, Je dispose d'une table qui utilise innoDB, elle à une structure similaire à celle-ci : int id <- auto incremental, unique varchar(255) a, v Foreign Key sous MySql [ par MadM@tt ] Bonjour à tous,Je travaille avec DBDesigner (mais c'est peu important pour la suite). Je viens de réaliser que les clés étrangères n'était pas possibl erreur de syntaxe mysql [ par pimpa4real ] Bonjour à tous,Voila je suis en train de créer une nouvelle base de données sous MySQL 5 et j'ai sans doute un problême de syntaxe....Si quelqu'un pou concatenation dans requette mysql [ par glipper ] Bonjour,je ne connais vraiment rien sur le language SQL, et bien que d'habitude je m'en sors en cherchant les requetes sur google, cette fois-ci je ne calcul de somme d'heure et de minute avec des datetime se trouvant dans des tables sous sql server en php [ par DericTP7 ] Bonjour,je me permet de faire appel à vos lumières, car avec mysql je m'en sors pas trop mal (façon de parler). Par contre, sous sql server ce n'est p Update Mysql Table from csharp datagridview [ par olibara ] BonjourSoit ma question erst tellement idiorte que personne ne veut y repondre soit personne ne connait la reponseJe cherche un petit tutorial  simple Requete INSERT [ par Frenzey ] Bonjour j'ai réalisé un script qui permet de parse un fichier xml et de transferer le contenu sur une Base de donnée grace à une requete INSERT. le pr connexion base mysql [ par freeradius ] slt mon pfe consiste a interroger une base de donne mysql sur un serveur unix il faut faire alors une application (avec windev) sur un system d'exploi Acces a MySql [ par olibara ] BonjourJusqu'aujourd'hui j'ai toujours travaillé avec MySql installé en localhost sur ma machine de travailJ'ai deux machines avec deux installation M Somme de champs MySQL [ par dthuler ] Bonjour à tous,Voilà une question de débutant:Je cherche le moyen (fonction?) d'additionner les valeurs d'un champ d'une sélection SQL (voir exemple c


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,732 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales