Pouvez-vous utiliser l'auto-incrémentation dans MySql avec elle en étant la Clé primaire
Je suis à l'aide de Guid que ma clé primaire pour tous mes autres tableaux, mais j'ai une exigence qui doit avoir un nombre d'incrémentation. J'ai essayé de créer un champ dans la table avec l'auto incrément mais MySql plaint de ce qu'elle devait être la clé primaire.
Mon application utilise MySql 5, nhibernate comme l'ORM.
Solutions possibles, j'ai pensé:
-
modifier la clé primaire auto-incrémentée de champ, mais encore à l'Identifiant comme un GUID pour le reste de mon application est compatible.
-
créer une clé composite à la fois avec le GUID et l'auto-incrémentation du champ.
Mes pensées au moment où le penchant vers la clé composite idée.
EDIT: La Ligne ID (Clé Primaire) est le GUID actuellement. Je voudrais ajouter un Champ INT et qui est Auto Incrémenté de sorte qu'il soit lisible par l'homme. Je n'avais juste pas envie de se déplacer loin de la norme en vigueur dans l'app d'avoir GUID du primaire-clés.
Il est aujourd'hui la raison pour elle de ne pas être calculé à partir du code. Avec elle étant une application web, je ne pensais pas qu'il serait possible à partir du code et de toujours s'assurer de l'unicité. Heureux d'avoir tort si
OriginalL'auteur Nathan Fisher | 2009-03-11
Vous devez vous connecter pour publier un commentaire.
Une valeur GUID est destiné à être unique dans l'ensemble des tableaux et même des bases de données, faites le type de colonne auto_increment index primaire et de faire un index UNIQUE pour le GUID
Ouais ... c'est ça.
OriginalL'auteur jab
Je pencherais l'autre sens.
Pourquoi? Parce que la création d'une clé composite qui donne l'impression à la prochaine les gars qui vient le long que c'est OK d'avoir le même GUID dans la table deux fois, mais avec des numéros de séquence.
OriginalL'auteur cletus
Un couple de pensées:
Si votre GUID est auntoincremental et unique, pourquoi ne pas le laisser être la Clé Primaire?
D'autre part, vous ne devriez jamais prendre semantical des décisions fondées sur des programmatique problèmes: vous avez un problème avec MySQL, pas avec la conception de votre base de données.
Donc, un couple de solutions de contournement ici:
Créer un déclencheur qui permettrait de définir le GUID à la valeur correcte une fois, il est inséré. C'est une base de données MySQL solution à un problème MySQL, sans modifier la sémantique de votre schéma.
Avant de l'insertion, de démarrer une transaction (assurez-vous de validation automatique est définie sur false), découvrez les dernières GUID, l'accroissement et l'insérer avec la nouvelle valeur. En d'autres termes, l'auto-incrémentation pas automatiquement 😛
Ouais, je sais que les Guid sont des numéros longs, mais il a demandé-ils autoincremental, voilà ce à quoi j'ai répondu 🙂
OriginalL'auteur Seb
GUID
's ne sont pas destinés à être disponible, c'est pourquoiAUTO_INCREMENT
pour eux n'a pas de sens.Vous pouvez, cependant, utiliser une
AUTO_INCREMENT
pour une deuxième colonne de clé primaire composite dansMyISAM
tables. Vous pouvez créer une clé composite sur(GUID, INT)
colonne et de prendre la deuxième colonne àAUTO_INCREMENT
.Pour générer un nouveau
GUID
, il suffit d'appelerUUID()
dans unINSERT
déclaration ou dans un déclencheur.OriginalL'auteur Quassnoi
Non, seulement la clé primaire peut avoir auto_increment, car sa valeur.
Je ne peux pas trouver l'information que vous mentionnez dans le lien que vous avez fourni. Seule chose est " Pour les tables MyISAM, vous pouvez spécifier AUTO_INCREMENT sur une seconde colonne dans un index multi-colonnes.'
OriginalL'auteur Spikolynn
Si, pour une raison quelconque, vous ne pouvez pas changer la colonne d'identité pour être une clé primaire, ce sujet de générer manuellement l'auto-incrémentation par une sorte de SÉQUENCE de table, plus d'un déclencheur à la requête de la SÉQUENCE de la table et enregistrer la prochaine valeur à utiliser. Affecter la valeur de la table de destination dans le déclencheur. Même effet. La seule question que je voudrais avoir est de savoir si l'auto-incrémenté de la valeur va le faire revenir thru NHibernate sans une re-sélection de la table.
OriginalL'auteur Rich