首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使使用自动递增的主键,插入也会出现故障。

即使使用自动递增的主键,插入也会出现故障。
EN

Stack Overflow用户
提问于 2016-08-29 17:32:19
回答 3查看 80关注 0票数 1

我有一个3列的表:id (自动递增PK)、product_idproject_id

product_idproject_id是外键。这2列也有一个唯一的键。

我发现,当我执行一个简单的"SELECT * FROM myTable“时,结果不是主要由id列排序的。它们似乎首先由id排序,然后也由其他2列排序。因此,我将(5,10)插入到表中,然后(5,6),然后选择它们,得到:

id = product_id \ project_id

2-5-6

1-5- 10

这是怎么发生的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-29 17:38:08

如果没有使用ORDER BY显式请求订单,MySQL将按照从索引中读取它们的顺序显示结果。

我可以推断,MySQL正在使用您的唯一索引来读取这些行,因此它们是由product_id先从该索引读取,然后由project_id读取。

打个比方,如果你从电话簿上读到名字,你会按照姓氏和名字的顺序来读。这就是他们被存储的顺序,不管首先分配的是哪个电话号码。

id列是主键,它隐式地附加到每个非主索引中。

票数 1
EN

Stack Overflow用户

发布于 2016-08-29 17:38:52

通常,数据库没有“默认”顺序,因此,如果不指定隐式顺序,则不能对结果的最终顺序作出任何假设。如果需要按任何特定顺序检索记录,则应在查询结束时附加“order”。请注意,完全相同的查询,没有order by子句,会产生非常不同的顺序。

票数 1
EN

Stack Overflow用户

发布于 2016-08-29 17:49:15

当订单丢失时,不要依赖于秩序。

ORDER关键字默认按升序对记录进行排序。若要按降序排序记录,可以使用DESC关键字。

因此,甚至不能保证两个看起来相同的查询会以相同的顺序返回结果:如果您不指定它,就不能依赖它。

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

https://stackoverflow.com/questions/39211936

复制
相关文章

相似问题

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