我想知道是否/如何为每个主键自动增加第二列:

CREATE TABLE test (
    `id` INTEGER UNSIGNED NOT NULL,
    `subId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    `text` VARCHAR(45) NOT NULL,
    PRIMARY KEY (`id`, `subId`)
)
ENGINE = InnoDB;
不幸的是,这个创建不起作用,只有当我指定 ID 作为主键和 subId 作为索引键时(但我需要它们一起并且 ID 可以重复)。
示例数据(我需要的):
1, 1
1, 2
1, 3
2, 1
2, 2
3, 1
使 ID 主索引和 subId 索引的问题在于 subId 将独立于 ID 递增。
如何实现这一目标,甚至可能吗?

最佳答案

我不得不处理一个类似的问题,以不自然的方式对类别树进行排序。
如果您一次插入一个 id 的所有行,您可以为每个 subId 执行如下操作:

SET @seq = 0;
INSERT INTO test
  (id,  subId,            text) VALUES
  (_id, @seq := @seq + 1, 'Some text')
;

如果您需要将一行“添加”到一个 id,您可以设置 @seq
SELECT IFNULL(MAX(subId), 0) INTO @seq FROM test WHERE id = _id;

这当然需要应用程序而不是 mySQL 来管理 id。

您也可以执行与最后一个代码块相同的操作来获取下一个可用的 id。

关于MySQL 在非主键上自动递增,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6138916/

10-11 01:34