如果一个表按某个字段排序,当多次查询时,是否返回的顺序都是一样的?

昵称是可以中文吗 2018-02-07 02:08:22
比如一个学生表,里面有名称name字段和分数point字段,如果sql语句如下:
select * from t_student  order by point desc

比如有下面样本数据 :

id name point
1 name1 99
2 name2 99
3 name3 90

如果分数相同,返回的结果是name1在前面还是name2在前面?数据库查询时根据什么逻辑返回的?是不是无论数据怎么变,查询第一遍和查询第二遍,返回的顺序都是一样的?还是说我加了数据,改变了索引什么的,然后重复查询返回数据可能不一样?
...全文
1905 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 zjcxc 的回复:
无法明确确定顺序的,比如没有 order by ,或者 order by 值重复的,参演是按照获取数据的先后,所以这个顺序通常无法保障,比如数据变化了,导致数据存储的页变了,或者是第一次取的时候没没有缓存,全部从磁盘取,第2次部分有缓存,只有部分需要从磁盘取 影响的因素多,不过通常对单表而言,除非是热点表,否则受到影响的机率比较低,查询时间间隔越短,结果相同的概率越大
单单这张表数据不变化,查询返回的结果就一样?会不会受到其他表数据的影响?
zjcxc 2018-02-09
  • 打赏
  • 举报
回复
无法明确确定顺序的,比如没有 order by ,或者 order by 值重复的,参演是按照获取数据的先后,所以这个顺序通常无法保障,比如数据变化了,导致数据存储的页变了,或者是第一次取的时候没没有缓存,全部从磁盘取,第2次部分有缓存,只有部分需要从磁盘取 影响的因素多,不过通常对单表而言,除非是热点表,否则受到影响的机率比较低,查询时间间隔越短,结果相同的概率越大
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
顺序不能保证,无法预知哪个在前哪个在后 你可以指定多个排序字段
嗯,就是好奇不指定后,每次返回的结果是否一样?
  • 打赏
  • 举报
回复
引用 2 楼 alex259 的回复:
排序的字段是一样的值,查询结果可能会每次不一样
are you sure?
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
如果仅是这个 select * from t_student order by point desc 简单语句,没有JOIN,没有其它,在t_student表中无记录DELETE/INSERT/UPDATE的情况下,每次出的顺序应该是一样的。 但从数据理论上来说,没有ORDER BY的情况下数据库系统不保证顺序。
版主大大,如果做了DELETE/INSERT/UPDATE,但是这些分数都是比较小的,然后我limit 2,就是做的DELETE/INSERT/UPDATE操作不对查询结果影响,这样每次还返回同样的结果吗?好奇只有一个Ordr by 字段,当出现这个字段有相同数据时,数据库是怎么按照顺序返回的?
alex259 2018-02-08
  • 打赏
  • 举报
回复
排序的字段是一样的值,查询结果可能会每次不一样
Rotel-刘志东 2018-02-08
  • 打赏
  • 举报
回复
返回应该是一样的。
ACMAIN_CHM 2018-02-08
  • 打赏
  • 举报
回复
如果仅是这个 select * from t_student order by point desc 简单语句,没有JOIN,没有其它,在t_student表中无记录DELETE/INSERT/UPDATE的情况下,每次出的顺序应该是一样的。 但从数据理论上来说,没有ORDER BY的情况下数据库系统不保证顺序。
ckc 2018-02-07
  • 打赏
  • 举报
回复
顺序不能保证,无法预知哪个在前哪个在后 你可以指定多个排序字段

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧