向表插入记录的顺序和读取记录的次序一样吗?? [问题点数:30分,结帖人wh62592855]
- 收藏帖子
- 回复
结帖率 100%
SQL code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
如上所示 难道SELECT查询时的顺序就是插入时的顺序吗
印象中以前在什么地方看到过专门对这个问题的讲解 可是忘了
我只记得好像书上说过插入的数据不一定是顺序存储的
不过SELECT如果是顺序读取的话 那么也可能和插入数据的顺序不一样
可能我这里数据量太小 数据库活动也不频繁 所以看起来好像查询时的顺序和插入时的顺序一样吧
呵呵 我怎么感觉有点绕 绕口令一样
问题点数:30分
0 2009-11-09 18:31:14
回复数 22 只看楼主 引用 举报 楼主
版主
不一样。表中的记录是没有顺序的! 虽然在ORACLE中其实还有一个rowid.
但物理上,ORACLE会根据块中的记录情况来自行安排存储的位置。比如 你有 1-100记录,此时删除了10-50,当再次插入记录 101时,它会把这条记录放到原来 10 的那个segment 中去。
0 2009-11-09 18:44:08
只看TA 引用 举报 #1 得分 10
恩 谢谢
我知道
你说的是存储的顺序和插入的顺序么
我这里问的是插入的顺序和SELECT查询时读出数据的顺序
0 2009-11-09 19:05:09
只看TA 引用 举报 #2 得分 0
楼主自己试试不就知道了?
0 2009-11-09 22:14:20
只看TA 引用 举报 #3 得分 0
我前面不是试过了吗
不过有些问题不是一个简单的测试就能说明的了的
0 2009-11-09 22:16:14
只看TA 引用 举报 #4 得分 0
新的数据库是顺序的,不过经常有删除插入等动作的话,就是不顺序了
这就是为什么有人认为ORACLE有默认排序的道理
0 2009-11-09 22:21:46
只看TA 引用 举报 #5 得分 0
呵呵 看来是我没把问题描述清楚 我换个方式问吧
比如说表TEST里
插入数据的顺序为 1、3、2、4、5
那么SELECT出来的顺序一定是13245吗
如果是13245的话 那么继续下面的问题
假如过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
那么这个时候SELECT的顺序是什么
16245? 12456?
0 2009-11-09 22:35:13
只看TA 引用 举报 #6 得分 0
引用 5 楼 hebo2005 的回复:
新的数据库是顺序的,不过经常有删除插入等动作的话,就是不顺序了
这就是为什么有人认为ORACLE有默认排序的道理
呵呵 我就是刚才在看你在开发版块发的那个帖子的时候想到这个问题的
0 2009-11-09 22:35:43
只看TA 引用 举报 #7 得分 0
ORACLE默认是怎么排序的呀?
0 2009-11-10 08:37:27
只看TA 引用 举报 #8 得分 0
无顺序
0 2009-11-10 08:43:52
只看TA 引用 举报 #9 得分 0
我的试验结果是12456,这就是说默认的SELECT出来的顺序就是插入的先后顺序?关注一下。
引用 6 楼 wh62592855 的回复:
呵呵 看来是我没把问题描述清楚 我换个方式问吧
比如说表TEST里
插入数据的顺序为 1、3、2、4、5
那么SELECT出来的顺序一定是13245吗
如果是13245的话 那么继续下面的问题
假如过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
那么这个时候SELECT的顺序是什么
16245? 12456?
0 2009-11-10 09:18:40
只看TA 引用 举报 #10 得分 0
引用 6 楼 wh62592855 的回复:
呵呵 看来是我没把问题描述清楚 我换个方式问吧
比如说表TEST里
插入数据的顺序为 1、3、2、4、5
那么SELECT出来的顺序一定是13245吗
如果是13245的话 那么继续下面的问题
假如过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
那么这个时候SELECT的顺序是什么
16245? 12456?
1.一定是13245
2.12456
个人观点 呵呵
我认为插入的顺序与select的顺序是一致的(在没有任何order by的情况下)
0 2009-11-10 09:36:24
只看TA 引用 举报 #11 得分 0
比如说表TEST里
插入数据的顺序为 1、3、2、4、5
那么SELECT出来的顺序一定是13245吗
如果是13245的话 那么继续下面的问题
假如过程中删了3 插入了6
而且碰巧6插入在了被删除的3的位置上
那么这个时候SELECT的顺序是什么
0 2009-11-10 09:37:30
只看TA 引用 举报 #12 得分 0
假如过程中删了3 插入了6
如果是13245的话 那么继续下面的问题
0 2009-11-10 09:38:01
只看TA 引用 举报 #13 得分 0
新的数据库是顺序的,不过经常有删除插入等动作的话,就是不顺序了
这就是为什么有人认为ORACLE有默认排序的道理
0 2009-11-10 09:38:22
只看TA 引用 举报 #14 得分 0
在不使用order by字句时,oracle不会给你做任何排序的操作。
很多人认为是按rowid排序,实际上并不是如此。实际上oracle不做任何操作(如果未使用rowid)
楼主这个例子只是碰巧而已,并不能说明任何问题(虽然很多情况都是感觉到是按rowid这样)。
oracle进行插入时也不是说后插入的记录的rowid一定比先插入的记录的rowid大,这是无稽之谈。它插入记录时是检查个表看是否有空间插入,如果无,则新的rowid。
0 2009-11-10 09:55:51
只看TA 引用 举报 #15 得分 10
很多人认为是按rowid排序,实际上并不是如此。实际上oracle不做任何操作(如果未使用rowid)
--这句括号内写错了,应该是 (如果未使用order by)
0 2009-11-10 09:56:47
只看TA 引用 举报 #16 得分 0
呵呵 一夜之间这么多人回帖啊 谢谢大家哈
回答这个问题我觉得首先得搞明白三点
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
好饿 ~ 吃点早餐
0 2009-11-10 10:23:10
只看TA 引用 举报 #17 得分 0
怎么没人跟帖了了
顶起来
0 2009-11-10 19:03:45
只看TA 引用 举报 #18 得分 0
通过测试发现好像不经过order的话,select出来的顺序是随机的。
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的顺序跟插入顺序是没有关系的。
0 2009-11-10 19:36:44
只看TA 引用 举报 #19 得分 10
呵呵 不容易呀
终于试出来不同的结果了啊
我也做过和你一样的实验
不过结果是SELECT顺序和插入顺序一样
没得出你的这种结果
0 2009-11-10 20:21:11
只看TA 引用 举报 #20 得分 0
这个有意义吗
以前用foxpro的时候,数据的插入是有顺序的
后来转到sqlserver这些大型的数据库后,教材里都是一直强调缺省的顺序无意义也不可靠
0 2009-11-10 20:59:54
只看TA 引用 举报 #21 得分 0
版主
学习中