SQL> create table t22(id number,name varchar2(20) primary key);Table created.SQL> insert into t22 values(2,'ha');1 row created.SQL> insert into t22 values(1,'wa');1 row created.SQL> insert into t22 values(3,'ya');1 row created.SQL> insert into t22 values(5,'ba');1 row created.SQL> commit;Commit complete.SQL> select * from t22; ID NAME
---------- --------------------
2 ha
1 wa
3 ya
5 ba
SQL> select a.*,rownum from t22 a; ID NAME ROWNUM
---------- -------------------- ----------
2 ha 1
1 wa 2
3 ya 3
5 ba 4
如上所示 难道SELECT查询时的顺序就是插入时的顺序吗
印象中以前在什么地方看到过专门对这个问题的讲解 可是忘了我只记得好像书上说过插入的数据不一定是顺序存储的
不过SELECT如果是顺序读取的话 那么也可能和插入数据的顺序不一样可能我这里数据量太小 数据库活动也不频繁 所以看起来好像查询时的顺序和插入时的顺序一样吧呵呵 我怎么感觉有点绕 绕口令一样
---------- --------------------
2 ha
1 wa
3 ya
5 ba
SQL> select a.*,rownum from t22 a; ID NAME ROWNUM
---------- -------------------- ----------
2 ha 1
1 wa 2
3 ya 3
5 ba 4
如上所示 难道SELECT查询时的顺序就是插入时的顺序吗
印象中以前在什么地方看到过专门对这个问题的讲解 可是忘了我只记得好像书上说过插入的数据不一定是顺序存储的
不过SELECT如果是顺序读取的话 那么也可能和插入数据的顺序不一样可能我这里数据量太小 数据库活动也不频繁 所以看起来好像查询时的顺序和插入时的顺序一样吧呵呵 我怎么感觉有点绕 绕口令一样
解决方案 »
- Oracle数据库打开看不到表
- 急。。救命呀~OEM登录的时候出现ORA-12154:TNS:无法解析指定的连接标识符,命令行lsnrctl status的时候监听参数文件也不是想要的路径
- 求算法,在线等
- oracle unix备份的数据 怎样导入到windows的oracle里面
- 急求oracle installer 3.3.1.2.4
- sos:跪求: Oracle 9i 初学者指南(中文版)的下载地址?
- 数据库链路问题(高手帮忙)
- 插入时遇到的怪问题,请高手指教?
- oracle工具——sqlldr讨论,在线等待
- 关于数据库访问的问题(表或视图不存在)
- job 每次执行消耗的时间?
- 想搞清楚几个Oracle问题?
我知道
你说的是存储的顺序和插入的顺序么我这里问的是插入的顺序和SELECT查询时读出数据的顺序
这就是为什么有人认为ORACLE有默认排序的道理
插入数据的顺序为 1、3、2、4、5
那么SELECT出来的顺序一定是13245吗如果是13245的话 那么继续下面的问题
假如过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
那么这个时候SELECT的顺序是什么
16245? 12456?
2.12456
个人观点 呵呵
我认为插入的顺序与select的顺序是一致的(在没有任何order by的情况下)
插入数据的顺序为 1、3、2、4、5
那么SELECT出来的顺序一定是13245吗 如果是13245的话 那么继续下面的问题
假如过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
那么这个时候SELECT的顺序是什么
这就是为什么有人认为ORACLE有默认排序的道理
1、向表中插入数据的顺序
2、数据在ORACLE中实际存储的顺序
3、使用SELECT(无ORDER BY子句)检索出来数据的顺序从1和3来考虑
从前面简单的实验来看 好像向表中插入数据的顺序就是使用SELECT检索出来数据的顺序(可是往往有些问题并不是一个简单的实验九能够证明的了的)把1、3结合上2一起考虑一下
考虑一下ORACLE存储的顺序 我们都知道 在ORACLE不一定先插入的数据就一定排在前面 因为当新插入一条记录的时候 ORACLE会自动查找空闲空间 这个时候有可能后插入的记录反而存储在早插入记录的前面
比如说上面说的那种情况:
插入顺序是13245
过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
这个时候存储的顺序就应该是16245好 那接下来就是SELECT检索数据的顺序了 我印象中好像ORACLE读取数据是顺序读取的吧(如果我没记错的话??) 那么这个时候就应该读取出来的顺序是16245(因为存储的顺序是16245 而又是顺序读取)
这样的话就和上面的观点“读取顺序和插入顺序一样”这个观点矛盾了哦 呵呵 因为如果按照前面的观点的话结果应该为12456好饿 ~ 吃点早餐
create table t_a(col_1 varchar2(1),col_2 varchar2(1));
----------------------------------
INSERT INTO t_a VALUES('2','2');
INSERT INTO t_a VALUES ('0','0');
INSERT INTO t_a VALUES('1','1');
COMMIT;
SELECT * FROM t_a;
此时得到的结果顺序是: 2,0,1
-----------------------------------
DELETE FROM t_a WHERE NAME='0';
COMMIT;
INSERT INTO t_a VALUES('3','3');
COMMIT;
SELECT * FROM t_a;
此时得到的顺序是 :2,1,3
-------------------------------
DELETE FROM t_a WHERE NAME='3' ;
COMMIT;
INSERT INTO t_a VALUES('3','3');
COMMIT;
SELECT *FROM t_a;
如果按生成顺序得到select的顺序的话应该是 2,1,3,但是此时得到的结果是 :2,3,1
--------------------------------
综上所述得到:select的顺序跟插入顺序是没有关系的。
终于试出来不同的结果了啊
我也做过和你一样的实验
不过结果是SELECT顺序和插入顺序一样没得出你的这种结果
后来转到sqlserver这些大型的数据库后,教材里都是一直强调缺省的顺序无意义也不可靠