2011-06-22 123 views
5

这可能在MySql中?我可以有一个自动递增的主键,前缀为一个字母,如R1234,R1235,R1236 ...等等。MySql自动递增字母数字主键?

+0

不是MySQL专家,但您可能想检查它是否支持序列。 – Limey

+0

目的是什么?这看起来像是违反了数据库设计的基本规则。一列只能包含一条信息。像这样连接字母数字往往表明这种规范化的规则正在被侵犯。并不总是,但通常。 –

回答

10

你可以做的是将密钥存储为两列。一个字符前缀和一个自动递增的int,它们都是为主键分组的。

CREATE TABLE myItems (
    id INT NOT NULL AUTO_INCREMENT, 
    prefix CHAR(30) NOT NULL, 
    PRIMARY KEY (id, prefix), 
    ... 
+2

注意这只适用于MyISAM,不适用于InnoDB表类型。 –

+0

您只需要一个字母作为前缀,即R123,因此您应该使用CHAR(1)而不是CHAR(30)来节省空间。如果你需要两个字母作为前缀,即RG123,那么你应该使用CHAR(2)。 –

+0

如果前导字符不变,我会避免使用复合键。用一对变量识别记录会相当混乱。 –

2

你可以做到这两个领域。但是根据我的理解,你无法在一个领域做到这一点。

create table foo (
    code char, 
    id int unsigned not null auto_increment 
    primary key(id,code) 
); 
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 

你可以从here获取更多详细信息 注意:它不适用于INNODB引擎