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相关知识,敬请关注我哦!谢谢!