前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle Sequence序列的介绍与使用

Oracle Sequence序列的介绍与使用

作者头像
Vaccae
发布2019-07-25 14:34:20
1.6K0
发布2019-07-25 14:34:20
举报
文章被收录于专栏:微卡智享

前言

前面因为项目数据导数据,我们介绍过《Oracle通过ODBC连接SQL Server数据库》,在实际导入过程中新的数据表结构里面存在不少ID的列,所以就用到了Oracle的序列,这一章我们就来介绍一下Oracle的序列(Oracle Sequence)。

Sequence介绍

Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录。这个序列一般作为代理主键(因为不会重复)。

Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用。Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如Oracle、DB2、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库则没有Sequence。

Sequence创建

序列的创建语法:create sequence

注:在创建序列之前用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限。

创建序列代码

代码语言:javascript
复制
-- Create sequence 
create sequence SEQ_INFO_CHG              --Sequence实例名
minvalue 1                                --最小值,可以设置为0
maxvalue 2147483647                       --最大值
start with 1                              --从1开始计数
increment by 1                            --每次加几个
cache 20;                                 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

还有一种写法

代码语言:javascript
复制
CREATE SEQUENCE SEQ_INFO_CHG
START WITH 1                          -- 从1开始计数
NOMAXvalue                            -- 不设置最大值
INCREMENT BY 1                        -- 每次加几个
NOCYCLE                               -- 一直累加,不循环
CACHE 10;                             --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

Sequence使用

通过上面的创建好Sequence后就可以通过currVal与nextVal进行使用。

currVal:返回 sequence的当前值

代码语言:javascript
复制
select SEQ_INFO_CHG.currVal from dual;

nextVal:增加sequence的值,然后返回增加后sequence值

代码语言:javascript
复制
select SEQ_INFO_CHG.nextVal from dual;

在Sql语句中可以使用sequence的地方:

  1. 不包含子查询、snapshot、VIEW的 SELECT 语句
  2. INSERT语句的子查询中
  3. INSERT语句的values中
  4. UPDATE 的 SET中

使用Currval和nextVal的注意事项

  • CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
  • 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

Sequence修改

拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须drop sequence再 re-create。

修改最大值

代码语言:javascript
复制
 alter sequence SEQ_INFO_CHG maxvalue 9999999;

修改多个值

代码语言:javascript
复制
alter sequence SEQ_INFO_CHG 
increment by 10
maxvalue 10000
cycle  —-到10000后从头开始
nocache;

Sequence删除

序列的删除语法:drop sequence

代码语言:javascript
复制
drop sequence SEQ_INFO_CHG;

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档