oracle对象之序列
是数据库对象,利用它可生成唯一的整数,序列对我们来说是比较重要的一个对象。
MySQL的ID(主键)是可以自增长的
但是Oracle没有这个东西,而Oracle咱们怎么来生成自动的id呢,就需要使用序列。
一般使用序列自动地生成表主键值或唯一键值。
注:序列不属于任何一张表。因为它和表是同级的对象。
一般来说,一个序列对应一张表
语法:
CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n|]
[minvalue n ];
[cache]
[NOCYCLE|CYCLE]
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
MINVALUE:指定序列的最小值
NOCYCLE:一直累加,不循环
CYCLE:累加到最大值循环
--查看数据库中当前用户创建的所有序列:
select SEQUENCE_NAME from user_sequences;
方式二:使用工具创建序列
注:生成序列前需要给咱们的用户开放创建序列的权限
第一步:登录plsql,左边找到Sequences,右键新建,如下
使用序列生成主键
序列的值:
--currval :返回序列的当前值
--nextval 返回序列首次引用时的起始值,以后使用nextval的引用将使用increment by 子句增加序列值,并返回新值。
查看当前序列的方式:select stu_seq.currval from dual
使用序列的方式:select stu_seq.nextval from dual
我们以后生成主键就可以直接这样写:
insert into employees(employees_id,last_name….)
values(emp_seq.nextval,’zhang’……)
2、修改序列语法:
ALTER SEQUENCE 序列名
[INCREMENT BY n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
*不能修改序列的初始值
3、删除序列语法:
DROP SEQUENCE 序列名;
hibernate使用oracle:
采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行(可以使用identity)。
<generator class="sequence">
<param name="sequence">hibernate_id</param>
</generator>
<param name="sequence">hibernate_id</param> 指定sequence的名称
Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时必须先创建一个sequence,如果不指定sequence名称,则使用Hibernate默认的sequence,名称为hibernate_sequence,前提要在数据库中创建该sequence。
特点:只能在支持序列的数据库中使用,如Oracle。