MySQL 使用几个不同的用户输入词自动递增
MySQL Auto-Increment with several different user-input words
我目前正在使用 MySQL InnoDB
数据库编写在 HTML + PHP
上编写的物种编目代码。
该代码允许用户输入动物数据并将其存储在数据库中以供进一步搜索
(ID(used for indexing),Specie, order, family, name
- 这些是当前数据库中的字段。
其中一个要求是每个动物都有一个唯一的代码,前2个字由用户定义。
EG:
TES/DES.01<br>
Format:
str/str.int
这是我卡住的地方,前两个词必须由用户设计,整数应该是一个基于以前结果的自增字段,因为会有多个动物具有相同的前缀和差异唯一代码将是整数。
例如:
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
...等等
我的第一个想法是为每个新前缀克隆 table 模式,然后将前缀与 ID 字段连接起来进行索引,但这在我当前的硬件结构上效率极低(即使在一个好的硬件?)。
我怎样才能做到这一点?
感谢您的帮助。
您想要一个由两部分组成的 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) ...
我目前正在使用 MySQL InnoDB
数据库编写在 HTML + PHP
上编写的物种编目代码。
该代码允许用户输入动物数据并将其存储在数据库中以供进一步搜索
(ID(used for indexing),Specie, order, family, name
- 这些是当前数据库中的字段。
其中一个要求是每个动物都有一个唯一的代码,前2个字由用户定义。
EG:
TES/DES.01<br>
Format:
str/str.int
这是我卡住的地方,前两个词必须由用户设计,整数应该是一个基于以前结果的自增字段,因为会有多个动物具有相同的前缀和差异唯一代码将是整数。 例如:
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 ...等等
我的第一个想法是为每个新前缀克隆 table 模式,然后将前缀与 ID 字段连接起来进行索引,但这在我当前的硬件结构上效率极低(即使在一个好的硬件?)。
我怎样才能做到这一点?
感谢您的帮助。
您想要一个由两部分组成的 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) ...