我有一个3列的表:id (自动递增PK)、product_id、project_id。
product_id和project_id是外键。这2列也有一个唯一的键。
我发现,当我执行一个简单的"SELECT * FROM myTable“时,结果不是主要由id列排序的。它们似乎首先由id排序,然后也由其他2列排序。因此,我将(5,10)插入到表中,然后(5,6),然后选择它们,得到:
id = product_id \ project_id
2-5-6
1-5- 10
这是怎么发生的?
发布于 2016-08-29 17:38:08
如果没有使用ORDER BY显式请求订单,MySQL将按照从索引中读取它们的顺序显示结果。
我可以推断,MySQL正在使用您的唯一索引来读取这些行,因此它们是由product_id先从该索引读取,然后由project_id读取。
打个比方,如果你从电话簿上读到名字,你会按照姓氏和名字的顺序来读。这就是他们被存储的顺序,不管首先分配的是哪个电话号码。
id列是主键,它隐式地附加到每个非主索引中。
发布于 2016-08-29 17:38:52
通常,数据库没有“默认”顺序,因此,如果不指定隐式顺序,则不能对结果的最终顺序作出任何假设。如果需要按任何特定顺序检索记录,则应在查询结束时附加“order”。请注意,完全相同的查询,没有order by子句,会产生非常不同的顺序。
发布于 2016-08-29 17:49:15
当订单丢失时,不要依赖于秩序。
ORDER关键字默认按升序对记录进行排序。若要按降序排序记录,可以使用DESC关键字。
因此,甚至不能保证两个看起来相同的查询会以相同的顺序返回结果:如果您不指定它,就不能依赖它。
https://stackoverflow.com/questions/39211936
复制相似问题