我正在运行这个MySQL选择查询:
select * from ABC where column_value=1;
我希望得到这样的输出:
ID Name
1 AAA
2 BBB
3 CCC
但相反,我得到了这个:
ID Name
2 BBB
1 AAA
3 CCC
有谁能让我知道为什么MySQL表现得像这样?
答案 0 :(得分:4)
数据库倾向于使用最快的方式从表中读取数据。这意味着如果发现数据更快,它可以按任何顺序返回数据,除非您使用ORDER BY
子句。
答案 1 :(得分:1)
select * from ABC where column_value=1;
查询没有指定返回行的任何排序。
SQL是一种处理元组集的语言,根据定义,a set是一个无序的项集合。
在某些情况下,一个数据库引擎或另一个数据库引擎按特定顺序返回行(按PK
f.e。的值排序)是一个实现细节。它不是语言所必需的,它可以随时改变。
更重要的是,当查询没有为返回的行指定顺序时,数据库引擎会使用它找到的任何更适合的方法来快速获取它们。订单可能取决于外部因素,并可能随时间而变化。例如,如果从表中删除查询返回的行,然后再次插入它们,但是以不同的顺序,相同查询的后续运行可能(并且很可能)以不同的顺序返回行。
作为洞察力(既不精确也不可靠),对于在小表上不包含ORDER BY
子句的查询,数据库按照它们在其中找到的顺序返回行表格数据,因为它没有读取索引。
对于小型表,引擎会在不需要时跳过读取索引并直接转到表数据。通过这种方式,它可以节省磁盘访问权限,但不会为处理提供任何额外的值。
答案 2 :(得分:0)
默认情况下,即ie。默认主键将用于"顺序为",您可能删除了某些行?
答案 3 :(得分:0)
select * from ABC order by ID where column_value=1;
您可以使用order by
功能获取所需的结果。