比如一个学生表,里面有名称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在前面?数据库查询时根据什么逻辑返回的?是不是无论数据怎么变,查询第一遍和查询第二遍,返回的顺序都是一样的?还是说我加了数据,改变了索引什么的,然后重复查询返回数据可能不一样?

解决方案 »

  1.   

    如果仅是这个 select * from t_student  order by point desc 简单语句,没有JOIN,没有其它,在t_student表中无记录DELETE/INSERT/UPDATE的情况下,每次出的顺序应该是一样的。
    但从数据理论上来说,没有ORDER BY的情况下数据库系统不保证顺序。
      

  2.   

    版主大大,如果做了DELETE/INSERT/UPDATE,但是这些分数都是比较小的,然后我limit 2,就是做的DELETE/INSERT/UPDATE操作不对查询结果影响,这样每次还返回同样的结果吗?好奇只有一个Ordr by 字段,当出现这个字段有相同数据时,数据库是怎么按照顺序返回的?
      

  3.   

    are you sure?
      

  4.   

    无法明确确定顺序的,比如没有 order by ,或者 order by 值重复的,参演是按照获取数据的先后,所以这个顺序通常无法保障,比如数据变化了,导致数据存储的页变了,或者是第一次取的时候没没有缓存,全部从磁盘取,第2次部分有缓存,只有部分需要从磁盘取
    影响的因素多,不过通常对单表而言,除非是热点表,否则受到影响的机率比较低,查询时间间隔越短,结果相同的概率越大