关于Oracle数据库插入数据排序的问题

我通过eclips编写java程序往Oracle数据库中插入数据,在数据库中建立 create table stu(id number primary key,name varchar2(20)); 建立序列create sequence start with 100 increment by 2;
java程序如下:
import java.sql.*;
public class test {
public static void main(String[] args) {
Connection conn=null;
PreparedStatement stmt=null;
String sql="insert into stu values(stu_seq.nextval,?)";
try {
conn=ConnectionUtils.openConnection();
stmt=conn.prepareStatement(sql);
conn.setAutoCommit(false);
for(int i=0;i<10000;i++){
stmt.setString(1, "Jack"+i);
stmt.addBatch();
if(i%1000==0){
stmt.executeBatch();
stmt.clearBatch();
}
}
stmt.executeBatch();
conn.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
即通过批处理往数据库stu表增加数据,当i<2000时,通过select * from stu where rownum<20;查询时,结果集的数据顺序按照插入顺序,即Jack0在第一行, 但是当i<10000或者更大时,用select * from stu where rownum<20;查询,排在第一位的不是Jack0,

而第一个插入的Jack0排到了:1218 行上

求大神详细解答! 谢谢!

正常现象。sql中没有使用order by的情况下,查询结果集的返回次序本来就是不受保证的追问

数据插入有顺序可言吗? 插入数据量较小时,还是按顺序的!

追答

我理解的“顺序”是针对数据显示而言的,对于数据插入来说没有顺序这么一说。

如果你说的插入顺序指的是存储时的物理分布的话,答案是同样不保证顺序。具体原因请从oracle block的存储机制上考虑。

追问

显示的顺序是通过order by 实现的吗? 就是说我插入顺序是按照主键递增的规律插入的,显示数据时不使用order by(select * from stu;) ,这时显示的数据不会是按照插入顺序来显示的?

追答

没有任何规范保证这一点。举个最常见的场景,查询可能是并行执行的(parallel query),查询出来的结果肯定不保证有序

温馨提示:答案为网友推荐,仅供参考
相似回答