比如一个学生表,里面有名称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在前面?数据库查询时根据什么逻辑返回的?是不是无论数据怎么变,查询第一遍和查询第二遍,返回的顺序都是一样的?还是说我加了数据,改变了索引什么的,然后重复查询
无法明确确定顺序的,比如没有 order by ,或者 order by 值重复的,参演是按照获取数据的先后,所以这个顺序通常无法保障,比如数据变化了,导致数据存储的页变了,或者是第一次取的时候没没有缓存,全部从磁盘取,第2次部分有缓存,只有部分需要从磁盘取
影响的因素多,不过通常对单表而言,除非是热点表,否则受到影响的机率比较低,查询时间间隔越短,结果相同的概率越大
如果仅是这个 select * from t_student order by point desc 简单语句,没有JOIN,没有其它,在t_student表中无记录DELETE/INSERT/UPDATE的情况下,每次出的顺序应该是一样的。
但从数据理论上来说,没有ORDER BY的情况下数据库系统不保证顺序。