序列
开发中最重要,序列(sequence)是序列号的生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
创建序列需要
CREATE SEQUENCE 序列名
[increment by n]
[start with n]
[{maxvalue n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE N|NOCACHE}]
/* increment 步长是多少
start 初始值多少
maxvalue/MINVALUE 最大最小值
CYCLE 是否循环
NOCACHE 缓存值(一次生成多少个序列)*/
其中: INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则序列的值是按照此步长递减的。
start with 定义学列的初始值(即产生的第一个值),默认为1
maxvalue 定义序列生成器的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能产生的最大值为10的27次方:对于递减序列,最大值是-1
删除序列:
drop sequence 序列名;
删除序列的认应该是序列的创建者或者拥有drop any sequence系统权限的用户。序列一旦删除就不能被引用了。序列的某些部分也可以在使用中进行修改,但不能修改start with选项。对序列的修改只影响随后产生的序号,已经产生的序号不变,修改序列的语法如下:
序列的使用
如果已经创建了序列,怎么使用?方法是使用currval和nextval来引用序列的值。
NEXTVAL 取得下一个序列的值
CURRVAL 取得当前序列的值,新打开的会话中,是不存在currval值,必须执行一次nextval生成一个拿到当前值。
调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,调用:
序列名.nextval
CURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没通过调用nextval产生序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,
序列名.CURRVAL
--eg 序列的应用:创建用于表emp的主键列的序列
create sequence seq_emp increment by 1 start with 1 maxvalue 100000;
--使用序列
insert into emp(id,empname ,sex) values(seq_emp.nextvalue,'张三'|seq_emp.currval,'男');
insert into emp(id,empname ,sex) values(seq_emp.nextvalue,'张三'|seq_emp.currval,'男');
insert into emp(id,empname ,sex) values(seq_emp.nextvalue,'张三'|seq_emp.currval,'男');
查看序列
通过数据字典USER_OBJECTS可以查看用户拥有的序列。
通过数据字典user_sequences可以查看序列的设置。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!