我有一个包含3列的表格:id
(自动递增PK),product_id
,project_id
。
product_id
和project_id
是外键。这两列还有一个唯一的密钥。
我发现当我做一个简单的“SELECT * FROM myTable”时,id
列主要不会对结果进行排序。它们似乎首先按id
排序,但后来又排列其他2列。所以,我将(5,10)插入表中然后(5,6),然后选择它们,我得到:
id | product_id | PROJECT_ID
2 | 5 | 6
1 | 5 | 10
这是怎么发生的?
答案 0 :(得分:1)
如果您没有明确请求ORDER BY
的订单,MySQL会按照从索引中读取的顺序显示结果。
我推断MySQL正在使用你的UNIQUE索引读取这些行,因此首先按照product_id,然后按project_id按顺序读取它们。
通过类比,如果您从电话簿中读取姓名,则按姓氏顺序,然后按名字顺序阅读。这是他们存储的顺序,无论首先分配了哪个电话号码。
id列是主键,它隐式附加到每个非主索引。
答案 1 :(得分:1)
通常情况下,数据库没有"默认"如果您没有指定隐式订单,则不能对结果的最终顺序做出任何假设。如果您需要以任何特定顺序检索记录,则应附加"订购"在您的查询结束时。 请注意,没有order by子句的完全相同的查询可以以非常不同的顺序产生结果。
答案 2 :(得分:0)
缺少ORDER BY时,请不要依赖订单。
ORDER BY关键字默认按升序对记录进行排序。要按降序对记录进行排序,可以使用DESC关键字。
所以甚至不能保证看起来相同的两个查询会以相同的顺序返回结果:如果你没有指定它,你就不能依赖它。