2009-09-07 19 views

Répondre

1

Vous avez plusieurs choix. Premièrement, vous pourriez faire de l'id un UUID (un champ varchar 36+), et utiliser la fonction UUID() de MySQL. Une autre option consiste à utiliser une table comme une sorte de table de génération de séquence, vous permettant d'utiliser les fonctions auto_increment, et d'utiliser simplement ce qui est généré lors de l'insertion dans cette table en tant que clé ailleurs.

Personnellement, j'opterais pour un UUID car c'est un moyen assez courant d'avoir des identifiants uniques au monde. Un mot d'avertissement: vous feriez mieux de générer ces UID dans la langue de votre client au lieu d'utiliser l'implémentation de MySQL.

0

Quel est le problème avec la définition de colonne (ID) à primary/unique et auto_increment? Ps: de plus, si vous avez besoin d'unicité entre plusieurs tables, vous faites probablement quelque chose de mal.

+0

utilisant l'unicité sur plusieurs tables ne sont pas ma seule option, mais je préférerais que sur la fusion de deux tables et l'ajout d'une colonne de type. De plus, les deux tables contiennent des données différentes pour les deux types d'informations. La fusion des ensembles de données entraînerait donc des valeurs nulles en excès. – dittle

+0

Je ne comprends toujours pas pourquoi vous ne pouvez pas avoir une table principale avec des ID primaires pour chaque sous-table. C'est pourquoi nous appelons mysql relationnel. – dusoft

+0

Je suppose que cela pourrait être fait si j'ai utilisé des déclencheurs pour générer les valeurs dans les tables secondaires. encore, il serait bien que tout soit traité en une seule fonction. – dittle

0

pense que cela peut être quelque chose comme ça

delimiter $$ 
CREATE PROCEDURE myProc() 
BEGIN 
DECLARE mid INT; 
START TRANSACTION; 
select MAX(id) + 1 INTO mid ( SELECT id FROM tbl1 UNION ALL SELECT id from tbl2 ...) tbls; 
INSERT INTO <somt_tbl> VALUES (mid, ...); 
COMMIT; 
END$$ 
+1

@Paul Svirin: Je suggère d'ajouter cette ligne de signature dans votre profil. La pratique standard ici sur SO est de fournir uniquement des liens qui aideront les gens à résoudre une réponse. Les auto-plugs éhontés sont découragés et personne n'utilise une ligne de signature comme vous. – RSolberg