首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建复合auto_increment列,其中之一是按组创建

如何创建复合auto_increment列,其中之一是按组创建
EN

Stack Overflow用户
提问于 2015-05-06 16:03:43
回答 1查看 113关注 0票数 0

父表- sectionId是主键

代码语言:javascript
复制
|    sectionId     |     Name   |
|       1          |  Section1  |  
|       2          |  Section2  |  
|       3          |  Section3  | 

子表-组合键(sectionId和valueId)

代码语言:javascript
复制
|   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,如下所示

代码语言:javascript
复制
1-1
1-2
1-3  

如果sectionId 2出现了

代码语言:javascript
复制
2-1
2-2

如果我第一次插入any sectionId,则相应的valueID应为1,然后序列应继续

有没有可能在MYSQL中做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2015-05-06 18:31:36

不要像2-1那样存储值。相反,当你需要它的时候,做

代码语言:javascript
复制
SELECT CONCAT(sectionId, '-', valueId) AS my_fancy_valueId FROM table...

然后,您可以使用MyISAM存储引擎通过表来实现这一点。需要注意的是,它(目前)还不支持外键或事务。

manual

对于MyISAM表,可以在多列索引中的辅助列上指定AUTO_INCREMENT。在本例中,为AUTO_INCREMENT列生成的值被计算为MAX(auto_increment_column) + 1 WHERE prefix=given-prefix。当您想要将数据放入有序组中时,这很有用。

代码语言:javascript
复制
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;

返回以下内容的

代码语言:javascript
复制
+--------+----+---------+
| 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表,也会发生这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30070903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档