ORACLE向表插入记录的顺序和读取记录的次序一样吗??

Oracle 专栏收录该内容
224 篇文章 0 订阅

向表插入记录的顺序和读取记录的次序一样吗?? [问题点数:30分,结帖人wh62592855]

右鞋左穿

Bbs6

结帖率 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

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如果是顺序读取的话 那么也可能和插入数据的顺序不一样

可能我这里数据量太小 数据库活动也不频繁 所以看起来好像查询时的顺序和插入时的顺序一样吧

呵呵 我怎么感觉有点绕 绕口令一样

问题点数:30分

 0 2009-11-09 18:31:14

回复数 22 只看楼主 引用 举报 楼主

ACMAIN_CHM

Bbs5 版主

Blank Blank Blank Blank

不一样。表中的记录是没有顺序的! 虽然在ORACLE中其实还有一个rowid.

但物理上,ORACLE会根据块中的记录情况来自行安排存储的位置。比如 你有 1-100记录,此时删除了10-50,当再次插入记录 101时,它会把这条记录放到原来 10 的那个segment 中去。

0 2009-11-09 18:44:08

只看TA 引用 举报 #1    得分 10

请问insert into select 插入数据后顺序与源数据顺序不同各位大大,现在我有两张表 A(id,code,name) B(id,code,name) 两张表的id列都是不为空的自增列 使用insert into B(code,name) select code

右鞋左穿

Bbs6

恩 谢谢
我知道
你说的是存储的顺序和插入的顺序么

我这里问的是插入的顺序和SELECT查询时读出数据的顺序

0 2009-11-09 19:05:09

只看TA 引用 举报 #2    得分 0

再次明确Oracle插入与读取的顺序问题今天老婆问到一个问题:Oracle中,插入多条记录后,读的时候如果不用Order by,那顺序是如何?如果中间涉及UPDATE和DELETE,是否有影响? 这个其实之前总结过这个问题,但确实感觉没有深刻理解,才导致不是十分确定,看来还是方法上要改进。 之前总结的: http://blog.csdn.net/bisal/article/details/9715387

gisyellow

Bbs2

楼主自己试试不就知道了?

0 2009-11-09 22:14:20

只看TA 引用 举报 #3    得分 0

SQL 添加一列,按顺序自增有这样两张表。上面是投下票信息 Votes是投票数量 现在要按照投票数量排名 投票越多排名靠前。比如DraftId为4的最多161票 第一名 问题是 第二名有三个都是一票DraftId为13,14,

右鞋左穿

Bbs6

我前面不是试过了吗

不过有些问题不是一个简单的测试就能说明的了的

0 2009-11-09 22:16:14

只看TA 引用 举报 #4    得分 0

ORACLE`删数据后再插入数据时排列顺序不是在最后面追加`ORACLE`删完数据后再插入数据的排列顺序不是在最后面追加` 表结构 create table manager( managerid int primary key, managername var

hebo2005

Bbs7

Blank Blank

新的数据库是顺序的,不过经常有删除插入等动作的话,就是不顺序了
这就是为什么有人认为ORACLE有默认排序的道理

0 2009-11-09 22:21:46

只看TA 引用 举报 #5    得分 0

右鞋左穿

Bbs6

呵呵 看来是我没把问题描述清楚 我换个方式问吧

比如说表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

一个表中,几千套数据,将ID修改成自增列后发现ID不连续,之前的数据顺序打乱,如何解决这个问题?ID修改自增列后,ID正序,连续

右鞋左穿

Bbs6

引用 5 楼 hebo2005 的回复:

新的数据库是顺序的,不过经常有删除插入等动作的话,就是不顺序了
这就是为什么有人认为ORACLE有默认排序的道理

 呵呵 我就是刚才在看你在开发版块发的那个帖子的时候想到这个问题的

0 2009-11-09 22:35:43

只看TA 引用 举报 #7    得分 0

for循环中进行联网请求数据、for循环中进行异步数据操作,数据排序错乱问题解决;for循环中进行联网请求数据,由于网络请求是异步的,第一个网络请求还没有回调,第二次第三次以及后续的网络请求又已经发出去了,有可能后续的网络请求会先回调;这时我们接收到的数据的排序就会错乱;怎么才能让数据和for循环进行异步操作之前的顺序一样呢;1、网络请求使用同步请求,串型请求,等第一个网络请求回调后再去请求第二个;2、递归迭代,异步的网络请求,在当前请求完成后再去递归请求下一个;但是这两种方式...

xanaduwpz

Bbs3

ORACLE默认是怎么排序的呀?

0 2009-11-10 08:37:27

只看TA 引用 举报 #8    得分 0

用java的for循环批量插入数据的时候总是丢几条为程序做测试,有个这样的功能用for循环批量向数据库插入数据的时候总是丢几条,而丢的那条包的异常是空指针,我觉得向是循环太快程序反映不过来导致赋不上值而丢失数据,请问高手这种情况该怎么解决~~~!!

iqlife

Bbs8

Blank Blank Blank

无顺序

0 2009-11-10 08:43:52

只看TA 引用 举报 #9    得分 0

mysql里 怎么根据某个字段 进行顺序循环排列,各位大神拜托了!!!比如正常排序的顺序是112234455,想排成123451245这样可以实现吗

hfxk1983

Bbs1

我的试验结果是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

天上的小星星 在夜里很美丽

Bbs5

引用 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

智能指针的死穴 -- 循环引用C++最新标准C++11中已将基于引用计数的智能指针share_prt收入囊中,智能指针的使用门槛越来越低,不需要使用boost库,我们也能轻松享受智能指针给我们带来的方便。 智能指针,正如它的名字一样,似乎是个近乎完美的聪明角色,程序员不用再纠结于new出来的内存在哪释放比较合适这种问题。比如当一个资源被多个模块共享时,程序员需要在所有模块的生命周期都结束时,由最后一个不使用该指针的模块触发指

dgdgdgdgdgdgd

Bbs1

比如说表TEST里 
插入数据的顺序为 1、3、2、4、5 
那么SELECT出来的顺序一定是13245吗 

如果是13245的话 那么继续下面的问题 
假如过程中删了3 插入了6 
而且碰巧6插入在了被删除的3的位置上 
那么这个时候SELECT的顺序是什么 

0 2009-11-10 09:37:30

只看TA 引用 举报 #12    得分 0

数据结构基础概念篇数据结构一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。 数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的基本单位 数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。 数据类

dgdgdgdgdgdgd

Bbs1

假如过程中删了3 插入了6
如果是13245的话 那么继续下面的问题

0 2009-11-10 09:38:01

只看TA 引用 举报 #13    得分 0

Java面试题多思路解析--有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 思路分析:将一个数字插入按要求插入到一个数组中,怎样找到这个数字的的位置是关键。 针对这一题目,我整理了三种解决方案,以下是源代码: [java] view plain copy import java.util.Scanner;      public class

dgdgdgdgdgdgd

Bbs1

新的数据库是顺序的,不过经常有删除插入等动作的话,就是不顺序了 
这就是为什么有人认为ORACLE有默认排序的道理 

0 2009-11-10 09:38:22

只看TA 引用 举报 #14    得分 0

(C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了。链表的相关操作一样的,包含链表的创建、判断链表是否为空、计算链表长度、向链表中插入节点、从链表中删除节点、删除整个链表释放内存。如果单向链表理解了,那单向循环链表也就不难了。 单向循环链表如下图所示: 看图可以知道,单向循环链表和单向链表差不多,只不过是最后的尾节点指向的不是空,而是指向头节点。理解这一点很重要,

轻骑兵

Bbs1

在不使用order by字句时,oracle不会给你做任何排序的操作。

很多人认为是按rowid排序,实际上并不是如此。实际上oracle不做任何操作(如果未使用rowid)

楼主这个例子只是碰巧而已,并不能说明任何问题(虽然很多情况都是感觉到是按rowid这样)。

oracle进行插入时也不是说后插入的记录的rowid一定比先插入的记录的rowid大,这是无稽之谈。它插入记录时是检查个表看是否有空间插入,如果无,则新的rowid。

0 2009-11-10 09:55:51

只看TA 引用 举报 #15    得分 10

轻骑兵

Bbs1

很多人认为是按rowid排序,实际上并不是如此。实际上oracle不做任何操作(如果未使用rowid) 

--这句括号内写错了,应该是  (如果未使用order by)

0 2009-11-10 09:56:47

只看TA 引用 举报 #16    得分 0

一次向数据库中插入多条相同记录的SQL方法(只有一个列不同)declare @i int set @i=1 while @i begin     insert into WebClassSys(loginName,loginPwd,detailId,spId,tId,spKindId) values (@i,'1bbd886460827015e5d605ed44252251',1,1,1,1) set @i=@i+1 end

右鞋左穿

Bbs6

呵呵 一夜之间这么多人回帖啊 谢谢大家哈

回答这个问题我觉得首先得搞明白三点
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

向数据表中插入一条记录的方法用于向获取的分类表中插入默认分类 $categories[] = array("categoryguid" => "-1", "categoryname" => "默认分类");

右鞋左穿

Bbs6

怎么没人跟帖了了

顶起来

0 2009-11-10 19:03:45

只看TA 引用 举报 #18    得分 0

第29章、向表中添加一条记录【知识要点】   (1)添加记录 【问题提出】   学会了读取表中的内容,但表中的内容又是从哪来的?噢,对!是录进来的的,让我们一起看一下如果为客户表(Client)中添加一条记录。      回顾一下Client表的表结构。    【在线指导】   本章的核心是插入记录,主要通过INSERT INTO ……和Comm.ExecuteNonQuery()实现。    1、设

huangyunzeng2008

Bbs4

通过测试发现好像不经过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

数据库和java连接(eclipse)向users表中增加一条记录package cn.itcast.ch10.demo;import java.sql.Connection;import java.sql.Date;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;/* * 向users表中增加一条记录 */public cl...

右鞋左穿

Bbs6

呵呵 不容易呀 
终于试出来不同的结果了啊
我也做过和你一样的实验
不过结果是SELECT顺序和插入顺序一样

没得出你的这种结果

0 2009-11-10 20:21:11

只看TA 引用 举报 #20    得分 0

archwuke1

Bbs4

这个有意义吗

以前用foxpro的时候,数据的插入是有顺序的
后来转到sqlserver这些大型的数据库后,教材里都是一直强调缺省的顺序无意义也不可靠

0 2009-11-10 20:59:54

只看TA 引用 举报 #21    得分 0

用sql语句查出的字段顺序 和 查完放入list里的顺序不一样 。。用sql语句查出的字段顺序 和 查完放入list里的顺序不一样 。。3我的sql语句字段位置是这样的....  select htbh, fbf, cbf, nian,yue, ri, qx_glq, qx_zyz, jbt_zw1 from .... 可是查出来放进list里以后 字段位置就不是这样了..  {jbt_zw1=水, yue=3, cbf=周鹏, qx_zyz=2, fbf=公司,...

碧水幽幽泉

Bbs7 版主

Blank Blank Blank Blank

学习中

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值