我使用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主键是合乎逻辑的方法。这个问题是对我之前看到的一些对话的回应。感谢
答案 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数据类型的用例,这没有意义。