oracle序列sequence

跟mysql,sqlserver不同,oracle没有auto_increment

oracle实现自动增长的方式叫序列。

序列不属于表,跟表没有直接绑定的关系,是属于用户的。你创建好了,用就可以了。

查询序列:select * from user_sequences 得到的结果就是你登录的当前用户下的所有序列记录

每条记录对应某一张表的序列,因为是直接拿来用的关系,因此要区分哪个序列属于哪个表,那么创建序列取名的时候就别乱取了

比如我创建一个表student的序列名叫student_Sequence

创建序列

  1.前提准备,用户得有创建的权限 CREATE SEQUENCE或者CREATE ANY SEQUENCE

  2.创建语法

  CREATE SEQUENCE seqname [ INCREMENT increment ]
      [ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
      [ START start ] [ CACHE cache ] [ CYCLE ][order]

例子:

  CREATE SEQUENCE seqName--序列名

       minvalue 1        --最小值
       INCREMENT BY 1    --递增1
       START WITH 1      --从1开始
       NOMAXvalue        --无最大值
       NOCYCLE           --不循环
       CACHE 100;        --缓存100个序列号
表里没数据时创建序列:https://blog.csdn.net/weixin_44282540/article/details/90806301

表里已经有数据时,新增一个主键列,添加序列:https://blog.csdn.net/qq_24583825/article/details/72484112

create sequence student_SEQ
minvalue 1
maxvalue 9999
increment by 1
start with 1
nocycle
nocache

使用序列

语法:
序列名.[currval/nextval]


currval:表示当前值,新序列若没使用过nextval不能直接使用当前值,会报错;
nextval:表示序列的下一个值
例:查询序列的值
select seq_name.nextval from dual; --序列seq_name的下一个值
例:SQL语句中使用序列
insert into 表名 value(seq_name.currval)

hebernate注解:

@Id

@SequenceGenerator(name="req",sequenceName="seq_name")

@GeneratedValue(generator="req")
private Integer StudengID;

参考https://www.jb51.net/article/144519.htm

  

语法:
drop sequence [用户名.]序列名

例:删除序列
dorp sequence seq_name;


alert sequence [用户名.]序列名 [可选参数]

例:修改序列
alert sequence seq_name
increment by 10
nomaxvalue
nocycle
cache 10
(修改序列只能修改这几个值,不能修改初始值)

 

修改last_number

select * from user_sequences t where t.sequence_name ='student_req'
alter sequence student_reqincrement by 20 nocache
select student_req.nextval from dual;
alter sequence student_reqincrement by 1 cache 20

最简单的是重新创建序列,start with 指定最后数值

posted on 2021-04-08 15:55  刀锋93  阅读(230)  评论(0编辑  收藏  举报

导航