父表- sectionId是主键
| sectionId | Name |
| 1 | Section1 |
| 2 | Section2 |
| 3 | Section3 | 子表-组合键(sectionId和valueId)
| sectionId | valueId | LectureValue |
| 1 | 1 | somevalue1 |
| 1 | 2 | somevalue2 |
| 2 | 1 | somevalue3 |
| 2 | 2 | somevalue4 |
| 1 | 3 | somevalue5 |
| 2 | 3 | somevalue6 |
| 3 | 1 | somevalue7 |
| 3 | 2 | somevalue8 | 我希望根据sectionId填充valueId,如下所示
1-1
1-2
1-3 如果sectionId 2出现了
2-1
2-2如果我第一次插入any sectionId,则相应的valueID应为1,然后序列应继续
有没有可能在MYSQL中做到这一点?
发布于 2015-05-06 18:31:36
不要像2-1那样存储值。相反,当你需要它的时候,做
SELECT CONCAT(sectionId, '-', valueId) AS my_fancy_valueId FROM table...然后,您可以使用MyISAM存储引擎通过表来实现这一点。需要注意的是,它(目前)还不支持外键或事务。
对于MyISAM表,可以在多列索引中的辅助列上指定AUTO_INCREMENT。在本例中,为AUTO_INCREMENT列生成的值被计算为
MAX(auto_increment_column) + 1 WHERE prefix=given-prefix。当您想要将数据放入有序组中时,这很有用。
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;返回以下内容的
:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+在这种情况下(当AUTO_INCREMENT列是多列索引的一部分时),如果删除任何组中具有最大AUTO_INCREMENT值的行,则将重用AUTO_INCREMENT值。即使对于AUTO_INCREMENT值通常不会重用的MyISAM表,也会发生这种情况。
https://stackoverflow.com/questions/30070903
复制相似问题