sql数据库select查询返回数据无序

来源:百度知道 编辑:UC知道 时间:2024/06/18 16:48:44
sql数据库select查询返回数据结果应为按系统自动生成id显示,
最近发现返回结果呈无序状态,需加order by 来规范,
请教高手原因,谢谢!
补充说明一下:
原查询语句格式为 select * from 表名 where 条件=‘某某’
在不加order by id 等条件下,查询分析器中数据库返回结果默认为按系统ID,按数据库里的先后顺序返回结果(注:ID自增长 +1 为主键)最近数据库返回结果出现不按系统ID排列,必须加上order by 来重新排列才能达到先前的效果,请教这是什么原因,谢谢!

举例:
表名details

主键为d_id 为int主键自增长
其他字段 d_name d_F

数据有几笔:
d_id d_name d_F
1 张三 行政
2 李四 车间
3 张二 行政
4 孙五 车间
5 刘六 行政

正常情况下:
select * from details where d_name='行政'
得到行政部门人员结果,并返回结果按id先后自动排列:
1 张三 行政
3 张二 行政
5 刘六 行政

但现在返回结果无序,不按ID在数据库里的程序显示,如:
5 刘六 行政
1 张三 行政
3 张二 行政

必须改为 select * from details where d_name='行政' order by d_id
才能得到先前想要的结果

为什么这样显示? 求解

原来的表设置的是自增长的,所以默认显示为顺序显示的。在搜索数据库的时候,也是从低ID到高ID依次搜索的,在没有order by规范的时候,搜索到一个就显示一个,所以是按顺序显示的。这时数据库的缓存是没有存放你的搜索顺序。

你之后加order by之后再搜索,数据库会将你的搜索存在缓存里面的,也就是说现在数据库的缓存存放了你的显示顺序值,所以在以后就算你没有加order by来规范,也会默认按缓存显示(没有规范的时候,怎么显示都可以,所以数据库就不加处理的),如果你加了order by id 搜索之后,再修改一下,例如order by 其它字段,搜索几次之后,再不加 order by
数据库可能就会恢复为 默认为ID顺序显示。

楼主
select * from t1
本身就是没有顺序的,即便是你的表里有顺序,它也不会按照顺序取。

可能你要问以前为什么不用
以前楼主的select语句应该不是简单的select * from t1吧?
是不是有group by?提醒一下,group by会在你不加order by的时候自动加上order by的效果

加个标识列就行了。
identity(int,1,1)
---
问题补充:
为了分析原因,lz不妨将数据导入新表,看看问题存在不,方法如下:
select * into 新表 from 旧表;

你的sql数据库里id字段是否定义了ID为主键,类型INT,自动标识(递增)呢

1.你数据库是怎样设计的?
2.你程序是怎样设计的?

具体建议:
1.sql server 用自增字段,Oracle 用 sequence (序列)
2.自己写函数,新增的时候用 max+1