在SQL Server和MySql中,主键ID可以设置自增长,在oracle中不同,序列个人理解就相当SQL Server和MySql中的自增长。
创建序列
如何创建,语法:
create sequence seq
increment by 1 :每次增长的数值
start with 1 :从哪个值开始增长,也就是起始值
maxvalue 1000:序列最大值,nomaxvalue就是没有最大值
minvalue 1:最小值, 同样nominvalue就是没有最小值
cycle : 是否需要循环,nocycle就是不循环
cache: 是否缓存,nocache就是不缓存,默认20
序列使用
currval:表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错,报错信息如图
nextval:表示序列的下一个值
在添加操作中使用序列,在对应的位置直接用序列名.nextval
table_name:表名,seq_name:序列名
INSERT INTO table_name values(seq_name.nextval,....)
序列使用时会在以下情况出现裂缝:
1、回滚
2、系统异常
3、多个表同时使用同一序列
查看序列
通过查看user_sequences表来查看已创建的序列
如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值
select sequence_name,min_value,max_value,increment_by,last_number from user_sequences;
修改序列
使用alter sequence修改序列,后面接序列名,然后就是你要修改的选项
已产生的序列不会修改,修改的是将来的序列值
另外改变序列的初始值只能通过删除序列之后重新创建的方式实现
alter sequence seq_name
...
删除序列
使用drop sequence删除序列,后面也是接序列名
drop sequence seq_name