Oracle序列

Oracle序列

序列(SEQUENCE) 是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

创建序列
CREATE SEQUENCE SEQ_OA START WITH 1 -- 从1开始
INCREMENT BY 1 -- 每次增长1 -1 表示负增长
MAXVALUE 2000 -- 最大值为 2000 
MINVALUE 1 --最小值
CYCLE -- 达最大值以后循环从 1 开始

在mybatis中 使用的数据库是oracle 现在需要新增一条数据 主键使用序列

<INSERT id="insertAuthor" parameterType="domain.blog.Author" >
<selectKey keyProperty="stuid" resultType="int" order="BEFORE">
   SELECT SEQ_OA.NEXTVAL FROM dual
</selectKey>
INSERT INTO student (stuId ,stuName,stuAge) values(
#{stuId} ,#{stuname},#{stuAge}
)
修改序列

修改序列的注意事项:
1 必须是序列的拥有者或对序列有 ALTER any sequence权限
2 只有将来的序列值会被改变
3 改变序列的初始值只能通过删除序列之后重建序列的方法实现

可以通过Alert Sequence子句来修改序列, 在修改序列中常常会报错 而且很频繁.修改序列内容有如下限制:
(1)不能修改序列的初始值
(2)序列的最小值不能大于当前值
(3)序列的最大值不能小于当前值

Alter sequence示例:

ALTER SEQUENCE emp_sequence 
INCREMENT BY 10 MAXVALUE 10000 CYCLE 
-- 到10000后从头开始 NOCACHE ;
查询序列

1 通过数据字典USER_OBJECTS可以查看用户拥有的序列。
2 通过数据字典USER_SEQUENCES可以查看序列的设置。

例:查看用户的序列:

SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,
INCREMENT_BY,LAST_NUMBER FROM USER_SEQUENCES;
删除序列
SQL> drop sequence t1_seq;
使用场景

seq.nextval主要有以下两种使用场景:
(1). 如果一个事务中只是INSERT时需要序列,其他地方不会需要这个序列,那么只需要在INSERT … VALUES (seq.nextval …)语句中使用即可。
(2). 如果一个事务中INSERT一张表后,还需要插入时的主键ID值,作为外键插入其他表,那么就需要在INSERT第一张表前使用select seq.nextval from dual提前获取可用的ID保存到一个变量中,为后面使用。

更多Oracle相关知识,敬请关注我哦!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值