Oracle 中数据存储如何实现按id排列

例如有表cost,执行select * from cost结果如下

怎样操作可以使下次执行select * from cost时结果是按照id从小到大排列的
也就是说怎样使表中数据的存储本身就是按照id从小到大排列
想补充的是,id已经设置主键了,我不想重新建一张表,没有解决办法了么?

排序的话,可以通过order by 来实现。
sql:select * from tablename order by ID;
备注:默认的是升序(ASC),也可以让其降序(desc)进行排列。
sql:select * from tablename order by ID desc;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-18
数据存储在行上有个ROWID的概念,可以看作是物理位置,一般查询会根据查询到的rowid的顺序排序.
所以如果存储实现按ID排序,可以先把这些数据排好了顺序再插进一个表里,后续再查询时,实际是按rowid排序,但是可以看到是按ID排的了

insert into cost_new select * from cost order by id

select * from cost_new追问

这个cost_new 应该是一张新的表吧 我不能重新建一张表,这个问题可以解决么

追答

数据存放位置,物理位置已经在定了,固定在block里了,要改动就是找个临时地方把数据存起来,然后再排好序插入进去. 不建表就先排序导成EXCEL或文本,然后在导入.

想到的另外一个方法,可以自行测试下,写一个事务,必须是一个事务内,把数据保存在临时表,然后删除原表数据,再把临时表导进去,必须是一个事务内.

本回答被提问者采纳
第2个回答  2013-10-18
建一张临时表吧

create table tmp_cost as select * from cost order by id
第3个回答  2013-10-18
你这个表, 把 id 设置为主键看看, 不知道行不行...
第4个回答  2013-10-18
select * from cost order by id
相似回答