MySQL选择查询从主键给出错误的行序列

时间:2016-09-07 09:54:16

标签: mysql

我正在运行这个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表现得像这样?

4 个答案:

答案 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功能获取所需的结果。