Oracle序列基础知识
1、需求:在oracle的一张表中,满足一列自动增长的需要
解决方式:oracle 是利用序列来完成的(sequence)
语法
create sequence myseq
start with 1
increment by 1 //代表一次增长几个
minvalue 1
maxvalue 99999999
cycle|nocycle //表示序列增加9999999后从1开始(不建议使用循环,会导致数据自增ID重复)
cache|nocache //不缓存的意思 cache 10 表示一次产生10个号共你使用 使用cache可以提高效率,缺点可能会产生跳号
不能修改start with,如果想改,只能删除,重新创建,启动。
SQL> create sequence ceshi_seq start with 1 increment by 1 minvalue 1 maxvalue 9999999 nocycle nocache;
Sequence created.
2、使用序列向表中插入数据:
SQL> insert into classname (id,clname,clkecheng) values(ceshi_seq.nextval,'测试','yuyan');
1 row created.
查看已经插入的数据:
由于表中原来有数据,所以可以看到 ID为1的有两条数据(因为没有定义ID唯一)

3、序列细节
1.可以为表中的列自动产生值
2.由用户创建数据库对象,并可由多个用户共享
system 使用choy的序列
问题 : 如果system使用choy的序列,那么system的数据是从什么值开始增长
choy 已经创建了两条数据 那么system再调用这个序列 则id值要从3 开始
3.一般用于主键或唯一列
4.可以使用序列名currval来查看当前序列值
select choy.currval from dual;
1.nextval : 返回下一个可用的序列值。
通过序列名.nextval获得
select choy.nextval from dual;
4、细节说明
一旦定义了序列,就可以使用currval,nextval
currval 返回sequence的当前值
nextval 增加sequence的值,然后返回sequence的值
什么时候使用sequence
1.不包含子查询.snapshot view的select语句
1.insert 语句的子查询中
3.insert 语句的values中
4.update 语句的set中
如果想查看序列的当前值currval,必须先使用序列nextval值,否则会报错
删除序列
drop sequence 序列名;