当我访问这个链接时,我正试图以相反的顺序显示 SELECT 查询的结果集: Select last row in MySQL
在其中一个答案中提到关系数据库没有第一行或最后一行。所以我的问题是,如果我们输入 SELECT * FROM table_name
,结果集是否必须与数据输入数据库的顺序相同?
此外,如果有人能告诉我如何在 PHP 中以相反的顺序显示上述查询的结果(不在查询本身中使用任何排序),那就太好了。
最佳答案
SQL 表表示无序集。表中没有排序,除非用户指定排序。 SQL 结果集表示无序集,除非在最外层有一个order by
。这就是语言的定义方式。
因此,当您执行没有order by
的select
时,您无法保证行的顺序。在许多情况下,顺序看起来像插入顺序,但您不能保证这一点。
有许多因素会影响 select 返回的顺序,例如:
- 多线程数据库有独立的进程读取数据。
- 底层页面缓存机制不需要按顺序读取页面。
- 删除和随后的插入混淆了行。
- 可以通过索引而不是表扫描来满足查询。
如果您想要按特定顺序排列的行,请使用order by
。
关于mysql - SELECT 如何返回未排序的结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369418/