自递增序列的并行问题(是本身机制还是设计有误)?[@more@]自递增序列的并行问题
有一个项目,我们需要的是在插入一个字段的时候,字段ID自动递增,
表的结构如下
ID NO
----- -------
都是int字段
序列如下
CREATE SEQUENCE seq_mikzi
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE
ORDER;
触发器如下
create or replace trigger trig_mikzi
before insert on mikzi
referencing old as old new as new for each row
begin
select Seq_mikzi.nextval into :new.ID from dual;
end;
并行输入:
A用户
insert into mikzi(no) values(1);
B用户
insert into mikzi(no) values(2);
A用户
insert into mikzi(no) values(3);
B用户
insert into mikzi(no) values(4);
结果为
SQL> select * from mikzi;
ID NO
---------- ----------
1 1
3 3
2 2
4 4
如何设计才能在查询的时候为
ID NO
---------- ----------
1 1
2 2
3 3
4 4
因为可能每次order by消耗不少啊。
我用过很多种方法,一直不能解决,因为在SQL_SERVER中,使用自增字段建立得表格天生就是自动排序好得,不用在order by id了
而Oracle查询就顺序就乱了,这是本身Oracle机制问题还是我设计有误呢?
如果解决呢?
输入一次确认一次是没有用得。
不用sequence,单独用trigger也是不行,怎么解决呢?
有一个项目,我们需要的是在插入一个字段的时候,字段ID自动递增,
表的结构如下
ID NO
----- -------
都是int字段
序列如下
CREATE SEQUENCE seq_mikzi
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE
ORDER;
触发器如下
create or replace trigger trig_mikzi
before insert on mikzi
referencing old as old new as new for each row
begin
select Seq_mikzi.nextval into :new.ID from dual;
end;
并行输入:
A用户
insert into mikzi(no) values(1);
B用户
insert into mikzi(no) values(2);
A用户
insert into mikzi(no) values(3);
B用户
insert into mikzi(no) values(4);
结果为
SQL> select * from mikzi;
ID NO
---------- ----------
1 1
3 3
2 2
4 4
如何设计才能在查询的时候为
ID NO
---------- ----------
1 1
2 2
3 3
4 4
因为可能每次order by消耗不少啊。
我用过很多种方法,一直不能解决,因为在SQL_SERVER中,使用自增字段建立得表格天生就是自动排序好得,不用在order by id了
而Oracle查询就顺序就乱了,这是本身Oracle机制问题还是我设计有误呢?
如果解决呢?
输入一次确认一次是没有用得。
不用sequence,单独用trigger也是不行,怎么解决呢?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19622/viewspace-900901/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/19622/viewspace-900901/