Oracle中的序列

序列:是Oracle中用于产生一系列唯一数字的数据库对象,我们一般用于生产主键
通常有如下 特点:
自动提供唯一的数值
共享对象
主要用于提供主键值
将序列值装入内存可以提高访问效率
每一个序列有两个属性:
nextval:序列中的下一个值
currval:序列中的当前的值
创建序列:(用户需要有这个权限)
可以用 create sequence 序列名 或者 create any sequence 序列名
创建序列的语法:
CREATE SEQUENCE sequence  //创建序列名称
[INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环(到达最大值以后来判断是否继续循环)
[{CACHE n | NOCACHE}];//每次在缓存中存入多少值
例如:
create sequence test_seq	//序列名为test_seq
increment by 1		//每次增长1
start with 1		//从1开始
maxvalue 10		//最大值为10
cycle			//达到最大值之后会继续循环
cache 5;			//每次在缓存中存5个值
注意:
maxvalue大于等于开始的值,并且大于minvalue;
minvalue小于等于开始的值,并且小于maxvalue;
cache的值必须小于cycle(循环的次数)

修改序列:
注意事项:
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变
改变序列的初始值只能通过删除序列之后重建序列的方法实现
修改序列的语法:
ALTER SEQUENCE sequence  //创建序列名称
[INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环(到达最大值以后来判断是否继续循环)
[{CACHE n | NOCACHE}];//每次在缓存中存入多少值
例如
alter sequence my_seq
maxvalue 20
nocycle
解释:这里对序列my_seq进行了改变,使它的最大值变为20并且达到最大值之后不再循环

删除序列:
!!!删除序列之后要想使用这个序列就必须重新创建一个序列
语法:
drop sequence 序列名字
比如:
drop sequence my_seq
*************************对序列的其他操作*************************
获取序列的当前值:
语法:
select 序列名.currval from dual
获取序列的下一个值:
语法:select 序列名.nextval from dual
注意:nextval的值对于这个序列来说肯定是非空并且唯一的

知道了序列的一系列操作,我们在应用中通常需要插入主键列,而该列一般都是用序列的值来操作的
比如,有一个学生表student,它有id列(主键列)和name列,id通过序列my_seq来产生,现在给它插入一条数据,如下:
insert into student(id,name) values(my_seq.nextval,'jack');
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值