MySQL自动递增,带有几个不同的用户输入字

时间:2015-06-10 17:49:11

标签: php mysql database innodb auto-increment

我目前正在研究使用HTML + PHP数据库在MySQL InnoDB上编写的物种编目代码。

该代码允许用户输入动物数据并将其存储在数据库中以供进一步搜索 (ID(used for indexing),Specie, order, family, name - 这些是当前数据库中的字段。)

其中一个要求是每只动物都有一个唯一的代码,前两个单词由用户定义。

EG:
TES/DES.01<br>
Format:
str/str.int

这是我卡住的地方,前两个单词必须由用户设计,整数应该是基于之前结果的自动增量字段,因为将有多个动物具有相同的前缀和差异唯一代码将是整数。     EG:

TES/DES.01<br>
TES/DES.01<br>
RUN/MAL.01(There will be multiple different prefixes, and they will grow as long the users keep adding more)<br>

RUN / MAL.02 ......等等

我的第一个想法是为每个新前缀克隆表模式,然后将前缀与ID字段连接以进行索引,但这对我当前的硬件结构来说效率极低(即使在一个好的硬件中也可能效率低下?)。

我如何实现这一目标?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你想要一个2部分PRIMARY KEY,其中第二个是AUTO_INCREMENT,它会重置第一部分中的每个变化?这可以在MyISAM中直接使用,但不能在InnoDB中使用。

可以模拟。

CREATE TABLE ... (
    part1 ...,
    part2 TINYINT ZEROFILL UNSIGNED NOT NULL,
    ...
    PRIMARY KEY(part1, part2),
) ENGINE=InnoDB;

-- Insert a new row:
BEGIN;
    SELECT @num := MAX(part2) FROM .. WHERE part1 = '...' FOR UPDATE;
    INSERT INTO ... ('RUN/MAL', IFNULL(@num+1, 1), ...);
COMMIT;

-- Get the string you really want:
SELECT ... CONCAT(part1, '.', part2) ...