oracle 的sequence是干什么用的?跟表有什么关系?

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:50:48
比如我要建一个表,其中的id字段是主键,用access中的说法是自动增长型的, 那么在oracle中是不是是要建一个序列,那么这个序列是在这个表中创建还是单独建,如果单独建的话,那么跟这个id字段又怎么联系起来呢?

很简单的可以这么理解,在oracle中没有自增字段,用sequence可以实现序列的自增长,在你插入id的值的时候将那个字段的插入值这样写 sequence_name.nextval 或者建立一个触发器来进行关联。

如果你自己来建表的话,是要单独建一个序列。

//建一个序列,从1开始,递增1
create sequence XXX increment by 1 start with 1

//跟表的id对应的方式(假设TABLE表只有两个字段)
//curval返回序列的当前值,nextval先增加序列的值,再返回值
insert into TABLE values(XXX.curval,'aaa')
insert into TABLE values(XXX.nextval,'bbb')
insert into TABLE values(XXX.nextval,'ccc')
这样插入的三条记录的id分别是1,2,3

如果你是用hibernate的话,在hbm.xml映射文件里可以把id的属性设为<generator class="native">这样hibernate会根据具体的底层数据库来使用默认的增长方式,对于oracle就是sequence

这个是用触发器关联的,给你个例子

----创建表
Create table t_user(
Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6)
);

----创建序列
create sequence user_seq
increment by 1
start with 1
nomaxvalue
nominvalue
nocache

----创建触发器
create or replace trigger tr_use