Oracle序列基础知识

2025-12-29 19:43:28

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唯一)

Oracle序列基础知识

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 序列名;

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢