MySql自动递增字母数字主键?

6
在 MySql 中是否可以实现这一点?我可以有一个自动增加的主键,以字母为前缀,例如 R1234、R1235、R1236...等吗?

虽然我不是 MySQL 专家,但你可能想检查它是否支持序列。 - Limey
这是什么目的呢?看起来你正在违反数据库设计的一个相当基本的规则。一个列应该只包含单一信息。像这样连接字母数字往往是违反规范化原则的标志,尽管并非总是如此。 - Tom H
3个回答

12
你可以将键作为两个列存储。一个是字符前缀,另一个是自增整数,两个列都分组用于主键。
CREATE TABLE myItems (
    id INT NOT NULL AUTO_INCREMENT,
    prefix CHAR(30) NOT NULL,
    PRIMARY KEY (id, prefix),
    ...

你只需要一个字母作为前缀,例如R123,因此你应该使用CHAR(1)而不是CHAR(30)来节省空间。如果你需要两个字母作为前缀,例如RG123,那么你应该使用CHAR(2)。 - Naeem Ul Wahhab
1
如果主导字符将是恒定不变的,我会避免使用复合主键。用一对变量标识记录将变得非常混乱。 - Brad Koch

3
不行。但是对于MyIsam表,您可以创建一个多列索引并将auto_increment字段放在辅助列上,这样您就可以获得与您所要求的几乎相同的结果。
CREATE TABLE t1 (prefix CHAR(1) NOT NULL, id INT UNSIGNED AUTO_INCREMENT NOT NULL,  
..., PRIMARY KEY(prefix,id)) Engine = MyISAM;
INSERT INTO t1(prefix) VALUES ('a'),('a'),('b'),('b');
SELECT * FROM t1;
a  1
a  2
b  1
b  2

您可以从这里获取更多详细信息。 注意:此方法不适用于INNODB引擎。


2
您可以像这样使用两个字段来完成。但据我所知,您无法使用一个字段完成此操作。
create table foo (
  code char,
  id int unsigned not null auto_increment
  primary key(id,code)
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接