今天的另一个问题:)
这次我想知道是否/如何为每个主键创建第二列自动增量:
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
增加。
如何实现这一目标甚至可能?
答案 0 :(得分:2)
它可能不是你想要的,它只适用于MyISAM和BDB表,但我认为你最接近你所要求的是一个分组的主键。
来自manual:
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
Which returns:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
答案 1 :(得分:2)
我不得不处理类似问题,不自然地订购类别树。 如果您一次为一个id插入所有行,则可以为每个subId执行类似的操作:
SET @seq = 0;
INSERT INTO test
(id, subId, text) VALUES
(_id, @seq := @seq + 1, 'Some text')
;
如果您需要在ID中“添加”一行,可以使用
设置@seqSELECT IFNULL(MAX(subId), 0) INTO @seq FROM test WHERE id = _id;
这当然要求应用程序管理id而不是mySQL。
您也可以像上一个代码块一样获取下一个可用ID。