删除掉原记录,重新插入,通常显示的位置会后移。
这要看B前面是否有可用的块,如果有重新插入的记录仍然在B的前面,可以通过插入足够数量的记录将B前面的可用块占用,然后就会出现在B的后面。
如果不考虑开销,也可以将A删除后重建表,最后插入A。
一个可以重复出现的例子
CREATE TABLE TEST (NAME VARCHAR2(10));
INSERT INTO TEST VALUES('A');
INSERT INTO TEST VALUES('B');
INSERT INTO TEST VALUES('C');
SELECT * FROM TEST;
DELETE FROM TEST WHERE NAME='A';
INSERT INTO TEST VALUES('A');
SELECT * FROM TEST;
DROP TABLE TEST PURGE;
rowid是标识行的唯一性,格式:data object number(6个字符)+relative file number(3个字符)+block number(6个字符)+row number(3个字符)
数据库的理论基础就是集合论,本质上就是无序的,不使用order by(子查询或查询)是不能保证顺序,你把数据不停无序删除再加回估计就能看到这个现象,但大部分时候都是在磁盘上的次序,这跟数据库怎么读数据有关
嵌套使用rowid ,我试过了,应该可以
例如:
select b.rowid ,b.*
from ( select rowid,a.* from 表a ) b
order by b.rowid desc
可以明确的告诉你,在不加order by的时候,select的顺序是不能被保证的。所以你只能另改你的需求设计了
oracle数据库是没有默认排序的
要排序必须加上order by
lz的这种情况是一种巧合
因为oracle是按块进行读取数据的
如果数据按顺序存储,则可能使读取出来的数据是按顺