我想知道是否/如何为每个主键自动增加第二列:
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/