MySQL - 如何使用VARCHAR作为AUTO INCREMENT主键

Ken*_*son 7 mysql primary-key auto-increment

我使用VARCHAR作为我的主键.我想自动递增它(基数62,小写/大写,数字),但是,下面的代码失败(出于显而易见的原因):

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

但是,这有效:

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;
Run Code Online (Sandbox Code Playgroud)

自己跟踪'id'增量的最佳方法是什么?(因为auto_increment不起作用).我是否需要创建另一个包含ID当前迭代的表?或者有更好的方法吗?

编辑:我想澄清一点,我知道使用INT是一个auto_increment主键是合乎逻辑的方法.这个问题是对我之前看到的一些对话的回应.谢谢

You*_*nse 5

您必须使用INT字段
并在选择时将其转换为您想要的任何格式

  • 好吧,我很抱歉你觉得它"蹩脚"我只是问了一个问题,因为我在讨论中使用VARCHAR作为主要字段的内容,并听到VARCHAR的自动递增实现感到震惊.关于"程序员一切皆有可能"的"问题",仅仅因为它是可能的,并不意味着它是对的:PI认为我不需要提供一个例子. (6认同)
  • 大声笑,我喜欢回顾这样的帖子,并想知道我在想什么.:) 再次感谢 (3认同)
  • 同意.本地`id` VARCHAR(16)NOT NULL AUTO_INCREMENT PRIMARY KEY是不可能的.但是,使用VARCHAR作为主键并非废话.我只是问如何"增加"它以保证唯一性.顺便说一句,我确实使用BIGINT作为我的ID,因为它为我的实现提供了足够多的ID."只是放弃那些废话"< - 我真的很感谢你花时间回答,我尊重你在SO上的高声誉,但请多一点机智,因为我的问题并非不可能 (2认同)