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

时间:2010-08-11 05:44:03

标签: 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;

然而,这有效:

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;

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

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

3 个答案:

答案 0 :(得分:5)

你必须使用INT字段
并在选择时将其翻译成您想要的任何格式

答案 1 :(得分:0)

解决问题的示例:

创建一个具有唯一编号的文件,然后使用函数递增。

文件名可以是前缀,文件二进制内容代表数字。

当你需要一个新的id到reg invoque函数

实施例

    String generateID(string A_PREFIX){
        int id_value = parsetoInt(readFile(A_PREFIX).getLine())
        int return_id_value = id_value++
        return return_id_value
    }

其中" A_PREFIX - "是用于生成字段ID的文件名。

答案 2 :(得分:0)

或者只是创建一个序列并使用该序列维护pk字段,以使用nextval函数生成主键值。而且,如果有问题,请按顺序使用缓存。

但是正如其他人所述,这不是最佳选择,如果您的主键包含带编号的序列,那么最好使用int和auto-increment。 我看不到pk必须自动递增但是varchar数据类型的用例,这没有意义。