Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MYSQL : CRÉATION D'UN GUID


Information sur la source



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.
 

Commentaires et avis

signaler à un administrateur
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 !

signaler à un administrateur
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...

signaler à un administrateur
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).

signaler à un administrateur
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

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,749 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.