8
votes

MySQL - Comment utiliser Varcharne comme clé primaire d'incrément automatique

J'utilise un Varcharne comme clé primaire. Je souhaite une incrémentation automatique (base 62, inférieure / majuscule, chiffres), cependant, le code ci-dessous échoue (pour des raisons évidentes): xxx pré>

Cependant, cela fonctionne: p>

CREATE TABLE IF NOT EXISTS `campaign` (
  `account_id` BIGINT(20) NOT NULL,
  `type` SMALLINT(5)  NOT NULL,
  `id` VARCHAR(16) NOT NULL PRIMARY KEY
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


2 commentaires

Offtopic: Êtes-vous sûr de vouloir utiliser Myisam? Pour une base de données relationnelle, vous avez besoin d'innoDB dans MySQL pour créer des clés étrangères.


Non, je ne suis pas sûr du tout. J'utilise MySQL depuis un certain temps maintenant, cependant, on m'a dit que Myisam devrait être utilisé la plupart du temps et je viens d'aller avec ça: p


3 Réponses :


5
votes

Vous devez utiliser un champ Int
et traduisez-le sur le format que vous souhaitez à sélectionner Time


9 commentaires

Cela n'est pas possible dans mon cas car l'identifiant est transmis dans le cadre de l'URL.


De plus, je cherche spécifiquement le meilleur moyen d'incrémenter manuellement l'identifiant. Je sais bit.ly et éventuellement minuscule URL faire quelque chose de très similaire.


@Kenny lol Tout est possible pour le programmeur :) Convertissez-le avant de passer à la requête. Pas une grosse affaire. Ces raccourcisseurs d'URL le font comme je l'ai dit.


Merci, vous n'avez pas à utiliser Int Field, certains raccourcisseurs personnalisés d'URL (par exemple), utilisez une Bigint comme une clé primaire incrémentée automatique. Mais il y a des services qui utilisent Varcharne comme clé primaire et ils les incrément manuellement. Donc, ma question est, existe-t-il un moyen efficace d'obtenir une clé primaire de Varchark. Et je comprends beaucoup "tout est possible pour le programmeur" :) Cependant, cela conduit également à de nombreux problèmes en mettant en œuvre des pratiques connues et établies!


@Kenny a obtenu un exemple de "problème"? Que se passe-t-il si votre boiteux "Varchar AtOtyrement" mènera également à certains problèmes? Concurrence, par exemple


Eh bien, je suis désolé de penser que c'est "boiteux" que je pose juste une question à cause de quelque chose que j'ai lu dans une discussion sur l'utilisation de Varcharne en tant que champ primaire et a été choqué d'entendre une mise en œuvre d'une auto-incrémentation automatique de Varchar. Quant à "problèmes" avec "tout est possible pour le programmeur", juste parce que c'est possible, cela ne signifie pas que c'est raison: P Je ne pense pas avoir besoin de donner un exemple.


@Kenny qui venait de répondre à votre "impossible". Pas d'exemples nécessaires. il suffit de quitter ce non-sens.


D'accord. Nativement ID VARCHAR (16) NON NULL Auto_incrimentation La clé primaire n'est impossible. Cependant, en utilisant Varcharne comme clé primaire n'est pas un non-sens. Je me demandais simplement comment "incrémenter" cela pour garantir l'unicité. Et BTW, j'utilise Bigint pour mon identifiant, car il fournit plus que suffisamment d'identifiants pour ma mise en œuvre. "Il suffit de quitter ce non-sens" <- J'apprécie vraiment que vous preniez votre temps pour répondre, et je respecte votre haute réputation à ce sujet, mais s'il vous plaît avoir un peu plus de tact, car ma question n'était pas impossible


Lol, j'aime regarder en arrière aux poteaux comme ça et me demander ce que je pensais le h ***. :) Merci encore



0
votes

Exemple d'une solution à votre problème:

Créer un fichier avec un numéro unique, puis incrémenter avec une fonction.

Le nom de fichier peut être le préfixe et le contenu binaire de fichier représente un nombre.

Lorsque vous avez besoin d'un nouvel ID sur le REG, la fonction Fonction

exemple xxx

où "A_PREFIX-" est le fichier "A_PREFIX-". Nom que vous utilisez pour générer l'ID pour le champ.


0 commentaires

0
votes

ou simplement créer une séquence et maintenir le champ PK à l'aide de la séquence pour générer la valeur de la clé principale avec la fonction NEXTVAL. Et si Perf est un problème, utilisez le cache sur la séquence.

Mais comme d'autres l'ont indiqué, ceci est sous-optimal, si votre clé principale contient une séquence numérotée, il est préférable d'utiliser Int et auto-incrément. Je ne vois pas de cas d'utilisation où pk a à auto-incrémentation automatique, mais être un type de données Varcharner, il n'a pas de sens.


0 commentaires