文章目录

  • 一、创建序列
  • 二、序列的使用
    • 1、创建最简单的序列
    • 2、在dual虚表使用序列
    • 3、在SQL语句中使用序列
  • 三、序列裂缝
    • 1、序列不产生事务
    • 2、序列裂缝
  • 四、修改序列
  • 五、删除序列
  • 六、版权声明

在实际开发中,设计数据表的时候会把某些字段定义成一个自动增长的、唯一的流水号,例如记录编号、日志编号等,MySQL和SQL Server采用的是自增字段,Oracle和PostgreSQL采用了更灵活的序列生成器。在本文中,把序列生成器简称为序列。

一、创建序列

创建序列的语法如下:

create sequence 序列名[minvalue n][maxvalue n][increment by n][start with n][cache n|nocache][order|noorder][cycle|nocycle];

参数说明:

Oracle的序列分为递增序列和递减序列,递减序列极少使用(二十年我从未用过),为了方便介绍,本文假设序列是递增序列。

序列名:序列名是标志符,建议以SEQ_打头,例如为T_OPERLOG表的logid字段创建一个序列,可以把它命名为SEQ_OPERLOG(或SEQ_OPERLOG_LOGID),增加数据结构的可读性,这是我的个人经验,并不是Oracle数据库的要求。

[minvalue n]:序列的最小值,缺省值是1。

[maxvalue n]:序列的最大值,缺省值是9999999999999999999999999999。

[increment by n]:序列递增的步长,缺省值是1。

[start with n]:序列的起始值,缺省值是minvalue,如果n小于minvalue,创建序列会报语法错误。

[cache n|nocache]:是否采用缓存机制,nocache不采用缓存,缺省cache 20,数据库每次会生成20个值放在缓存中,如果缓存中有数据,就不需要再查数据库了,采用缓存机制可以提升效率。

[order|noorder]:获取序列的时候是否按顺序给值,如果多用户一起获取序列的值,使用order可以保证序列值的顺序按访问序列的事件排序,缺省是noorder。

[cycle|nocycle]:是否循环,缺省不循环,如果不循环,序列值到了maxvalue后将不可用。

二、序列的使用

1、创建最简单的序列

create sequence SEQ_GIRL;

执行以上SQL语句会在数据库中生成一个名字为SEQ_GIRL的序列,除了序列名,其它的参数都采用缺省值,相当于以下SQL:

create sequence SEQ_GIRL minvalue 1 maxvalue 9999999999999999999999999999 increment by 1 start with 1 cache 20 noorder  nocycle ;

2、在dual虚表使用序列

序列创建后,用序列名.nextval获取序列的下一个值,用序列名.currval来查看当前值。

在新的会话中,必须先使用nextval来产生一个值后才可以使用currval进行查看。

select SEQ_GIRL.nextval from dual;     -- 获取序列SEQ_GIRL的下一个值。
select SEQ_GIRL.currval from dual;     -- 获取序列SEQ_GIRL的当前值

3、在SQL语句中使用序列

我们先创建一个简单的表。

create table T_GIRL
(name    varchar2(10),     -- 姓名keyid   number(10)        -- 记录编号
);

1)在insert语句中使用序列。

insert into T_GIRL(name,keyid) values('西施'  ,SEQ_GIRL.nextval);
insert into T_GIRL(name,keyid) values('妲已'  ,SEQ_GIRL.nextval);
insert into T_GIRL(name,keyid) values('杨玉环',SEQ_GIRL.nextval);
insert into T_GIRL(name,keyid) values('李师师',SEQ_GIRL.nextval);

执行结果:

2)在update语句中使用序列。

update T_GIRL set keyid=SEQ_GIRL.nextval+100;

执行结果:

三、序列裂缝

1、序列不产生事务

序列的nextval方法不会产生事务,事务回滚命令rollback不会恢复序列的值,我们来做一个测试。

1)先获取序列的当前值。

2)执行一条不会成功的SQL语句。

3)再获取序列的当前值。

2、序列裂缝

如果用序列的值作为表中某个字段的值,这个字段的值可能会出现不连续的情况。因为序列的值不连续,有裂缝。

序列在下列情况下出现裂缝:

1)执行SQL语句失败;

2)事务回滚;

3)序列缓存;

4)多个表同时使用同一序列;

5)其它异常。

四、修改序列

修改序列的语法如下:

alter sequence 序列名[minvalue n][maxvalue n][increment by n][start with n][cache n|nocache][order|noorder][cycle|nocycle];

修改序列的参数与创建序列的参数相同,不同的是,修改序列时没有缺省值。

alter sequence SEQ_GIRL increment by 10 cycle

五、删除序列

删除序列的语法如下:

drop sequence 序列名;

六、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

Oracle序列生成器相关推荐

  1. oracle简单序列,oracle序列生成器(sequence)使用的一点小注意

    oracle序列生成器(sequence)使用的一点小注意 有人遇到这么一个问题,访问一个序列怎么出错了,错误如下: ORA-08002: 序列 SEQ_GX.CURRVAL 尚未在此会话中定义 这是 ...

  2. oracle中序号生成器,Oracle序列生成器

    在实际开发中,设计数据表的时候会把某些字段定义成一个自动增长的.唯一的流水号,例如记录编号.日志编号等,MySQL和SQL Server采用的是自增字段,Oracle和PostgreSQL采用了更灵活 ...

  3. Oracle序列使用:建立、删除

    在开始讲解Oracle序列使用方法之前,先加一点关于Oracle client sqlplus的使用,就是如果执行多行语句的话一定要加"/"才能表示结束,并执行!本篇文章的主题是通 ...

  4. oracle+创建序列自增,oracle序列详解和建立自增主键

    序列: 是oacle提供的用于产生一系列惟一数字的数据库对象.sql l 自动提供惟一的数值数据库 l 共享对象性能 l 主要用于提供主键值测试 l 将序列值装入内存能够提升访问效率spa 1.首先建 ...

  5. Oracle序列小结

    定义: 序列是一个计数器(序列号生成器),可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字),是oracle提供的用于产生一系列唯一数字的数据库对象.通过创建oracle序列和触发器来实 ...

  6. oracle sql序列,SQL server 和Oracle 序列

    1,SQL Server序列创建与使用 BEGIN IF EXISTS (SELECT * FROM sysobjects WHERE name = 'event_seq') DROP SEQUENC ...

  7. oracle 序列详解

    Oracle 序列详解 一 序列定义 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用途是生成表的主键值, ...

  8. oracle定义递减序列步长值,浅谈Oracle序列

    Oracle是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一,而序列是一个计数器,它并不会与特定的表关联,通过创建Oracle序列和触发器实现表的主键自增. 序列一 ...

  9. oracle序列累加循环,Oracle 序列的使用与说明

    1.序列的创建与说明 创建序列,Oracle序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINV ...

最新文章

  1. CodeForces 609B The Best Gift
  2. 【CodeVS】p1299 切水果
  3. 【转】javax.xml.transform.TransformerFactoryConfigurationError
  4. Conan and Agasa play a Card Game codeforce
  5. [渝粤教育] 西南科技大学 高频电子线路 在线考试复习资料2021版
  6. webservice 原理
  7. 5. vector 模板类型? 数据类型?
  8. Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
  9. 《数据库系统概念》14-静态散列
  10. HTMLTestRunner修改Python3的版本
  11. BZOJ 1901 Zju2112 Dynamic Rankings 题解
  12. Aip接口自动化测试框架pytest+allure+request+jsonpath+excle
  13. 秋天的第一杯奶茶该买哪家?我用爬虫爬取所有数据教你买哪家
  14. 拼多多 标题 html,拼多多的创意图和创意标题怎么测试?为什么要测试?怎样测试呢?...
  15. 失恋后同学对我的劝告。。。。表谢意
  16. Android studio连接夜神模拟器(一)
  17. Node.js Buffer
  18. macos重启docker
  19. go使用交叉编译时,二进制文件运行不了,出现line 1: syntax error: unexpected newline
  20. Mac上出现多个版本选择打开edge浏览器

热门文章

  1. 51单片机的io口可不可以接gnd_纯干货!简析单片机中的高阻态
  2. 中心对称又是轴对称的图形_2020广东省考行测备考:图形推理之对称知多少
  3. android sqlite orm,ioc,Afinal 0.2 发布 Android的快速开发框架(ORM,IOC)
  4. c语言recover函数的功能是,c语言实验报告(附答案版).doc
  5. python雷达图怎么做_使用Python绘制雷达图
  6. linux需要多少空间安装mysql_如何安装MySQL
  7. portal认证 php,如何用PHP制作OSSH 免费版华为Portal系统认证前端页面
  8. java将jfif格式转换成ipg_.jfif是什么格式 jfif格式怎么转jpg
  9. 编写 matlab_MATLAB的SFunction编写指导
  10. 述职答辩提问环节一般可以问些什么_内部资料,仅供阿里在职同事传阅:晋升答辩成功要诀...