`
percent
  • 浏览: 6872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

sequence的管理

阅读更多

CREATE SEQUENCE
名称
CREATE SEQUENCE — 创建一个新的序列号生成器

语法
CREATE SEQUENCE seqname [ INCREMENT increment ]
    [ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
    [ START start ] [ CACHE cache ] [ CYCLE ]
输入
seqname
将要创建的序列号名.
increment
INCREMENT increment 子句是可选的.一个正数将生成一个递增的序列,一个负数将生成一个递减的序列.缺省值是一(1).
minvalue
可选的子句 MINVALUE minvalue 决定一个序列可生成的最小值.缺省分别是递增序列为1递减为-2147483647.
maxvalue
使用可选子句 MAXVALUE maxvalue 决定序列的最大值.缺省的分别是递增为2147483647,递减为-1.
start
可选的 START start 子句 使序列可以从任意位置开始.缺省初始值是递增序列为 minvalue 递减序列为 maxvalue .
cache
CACHE cache 选项使序列号预分配并且为快速访问存储在内存里面.最小值(也是缺省值)是1(一次只能生成一个值, 也就是说没有缓存).
CYCLE
可选的 CYCLE 关键字可用于使序列到达最大值(maxvalue)或最小值(minvalue)时可复位并继续下去.如果达到极限,生成的下一个数据将分别是最小值(minvalue)或最大值(maxvalue).
输出
CREATE
命令成功执行的返回信息.
ERROR: Relation 'seqname' already exists
如果声明的序列已经存在.
ERROR: DefineSequence: MINVALUE (start) can't be >= MAXVALUE (max)
如果声明的初始值超出范围(最大值),返回此信息.
ERROR: DefineSequence: START value (start) can't be < MINVALUE (min)
如果声明的初始值超出范围(最小值),返回此信息.
ERROR: DefineSequence: MINVALUE (min) can't be >= MAXVALUE (max)
如果最小值和最大值不连贯.
描述
CREATE SEQUENCE 将向当前数据库里增加一个新的序列号生成器.包括创建和初始化一个新的名为 seqname 的单行表.生成器将为使用此命令的用户"所有".
在序列创建后,你可以使用函数 nextval(seqname) 从序列中获得新的数字.函数 currval('seqname') 可用于获取对当前会话中指定序列的上一次 nextval(seqname) 调用返回的数字.函数 setval('seqname', newvalue) 可用于设置指定的序列的当前值.下一次 nextval(seqname) 调用将返回所给的值加上序列增值.

使用象

SELECT * FROM sequence_name;
这样的查询可以获得序列的参数.除了获取最初的参数外,你可以用
SELECT last_value FROM sequence_name;
获得后端分配的最后一个值.你可以使用
底层的锁定用于令多个请求同时调用生成器成为可能.

  注意
如果用语序列对象的缓存的设置大于一,而且该对象可能被多个后端同时使用就有可能产生不可预料的结果.每个后端在访问过序列对象并递增序列对象的最后值后,将分配跟在序列值后面"缓存数".这样,该后端在下面的(缓存数-1)次返回序列值时将使用预分配好的数值,而不对共享对象做任何更新.所以,已经分配但在当前会话中没有使用的数字将会丢失.而且,尽管多个后端保证分配独立的序列值,当考虑所有的后端时该数值却有可能是乱序的.(例如,设置缓存数为10,后端 A 可能保留数值 1..10 并且返回 nextval=1,而后端 B 可能保留数值 11..20 并在后端A生成nextval=2之前返回 nextval=11.)因此,将缓存数设为一可以安全地假设 nextval 的数值是顺序生成的;当缓存数设置大于一,我们只能假设 nextval 值都是独立的,而不能假设它们都是纯粹顺序生成的.同样,last_value 将反映由任何后端保留的最后数值,不管它是不是nextval曾返回过的.

注意
请参考 DROP SEQUENCE 语句来删除序列.
每个后端使用其自身的缓存来存储分配的数字.已分配但当前会话没有使用的数字将丢失,导致序列里面出现"空洞".

用法
创建一个叫 serial 的递增序列,从101开始:
CREATE SEQUENCE serial START 101;
从此序列中选出下一个数字
SELECT NEXTVAL ('serial');
   
nextval
-------
    114
在一个 INSERT 中使用此序列:
INSERT INTO distributors VALUES (NEXTVAL('serial'),'nothing');
在一个 COPY FROM 后设置序列:
CREATE FUNCTION distributors_id_max() RETURNS INT4
    AS 'SELECT max(id) FROM distributors'
    LANGUAGE 'sql';
BEGIN;
    COPY distributors FROM 'input_file';
    SELECT setval('serial', distributors_id_max());
END;
兼容性
SQL92
CREATE SEQUENCE 是 Postgres 语言扩展.在 SQL92 里没有 CREATE SEQUENCE 语句.
============================================================

 

ALTER SEQUENCE
Name
ALTER SEQUENCE  --  更改一个序列生成器的定义
Synopsis
ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ RESTART [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
ALTER SEQUENCE name SET SCHEMA new_schema
  描述
ALTER SEQUENCE 命令修改一个现有的序列发生器的参数。 任何没有明确在 ALTER SEQUENCE
命令里声明的参数都将保留原先的设置。
要使用 ALTER SEQUENCE,你必须拥有该序列。 要改变一个序列的模式,你必须在新的模式上有 CREATE 权限。
参数
name
一个要修改的序列的名字(可以有模式修饰)。

increment
INCREMENT BY increment 子句是可选的。一个正数会让序列成为递增序列,负数则成为递减序列。
如果没有声明,将沿用原来的递增值。

minvalue
NO MINVALUE
可选的子句 MINVALUE minvalue 决定一个序列可以生成的最小的值。如果声明了 NO MINVALUE,
将使用缺省值, 对于递增和递减的序列分别是 1 和 -2^63-1。如果没有声明任何选项,则沿用
当前的最小值。

maxvalue
NO MAXVALUE
可选的子句 MAXVALUE maxvalue 决定序列的最大值。如果声明了 NO MAXVALUE,则使用缺省值,
对于递增和递减的序列分别是 2^63-1 和 -1。如果两个选项都没有声明, 则沿用当前的最大值。

start
可选的RESTART WITH start 子句允许序列可以在任何地方开始。

cache
CACHE cache 选项打开序列号预分配并存储在内存缓冲的功能。最小值是 1 (也就是每次只能生
成一个数值,没有缓冲)。 如果没有声明,将沿用旧的缓冲值。

CYCLE
可选的键字 CYCLE 可以用于允许序列在达到递增序列的 maxvalue 或者递减序列的 minvalue的时
候重叠使用。 如果达到了极限,那么生成的下一个数字将分别是 minvalue 或者 maxvalue。
NO CYCLE
如果声明了可选键字 NO CYCLE,任何在序列达到其最大极限后对 nextval 的调用都将返回错误。
 如果既未声明 CYCLE 也未声明 NO CYCLE, 那么将沿用原有的循环行为。
new_schema

序列的新模式。
例子
从 105 开始重新开始一个叫 serial 的序列:
ALTER SEQUENCE serial RESTART WITH 105;
  注意
为了避免并发的事务从同一个序列获取数值的时候被阻塞住,ALTER SEQUENCE 操作从来不会回滚;
 修改马上生效并且不能恢复。
ALTER SEQUENCE 将不会立即影响后端的 nextval 结果,除了当前的之外, 因为它又已经缓冲
了的序列号。它们只有再使用光所有已经缓冲的数值之后才能意识到改变了的序列参数。当前
后端将立即被影响。

有些 ALTER TABLE 的变种可以和序列一起用; 比如,使用 ALTER TABLE RENAME 给一个序列
重命名。

兼容性
ALTER SEQUENCE 遵循 SQL 标准, 但是 SET SCHEMA 除外,这个是 PostgreSQL 扩展。

分享到:
评论

相关推荐

    java自动生成Oracle sequence管理类

    Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...

    NumberSequence

    总之,了解并正确使用AX中的Number Sequence对于企业的数据管理和流程效率至关重要。它不仅简化了编号过程,还确保了数据的完整性和合规性。通过上述步骤,用户可以自定义并维护适合其业务需求的Number Sequence,...

    sequence等同于序列号

    通过以上介绍可以看出,在Oracle数据库中,`sequence`机制是非常强大的工具,能够帮助我们高效地管理和分配唯一的标识符。合理配置和使用`sequence`不仅可以提高数据库操作的效率,还能确保数据的一致性和完整性。...

    SequenceDiagram-3.0.5.zip

    SequenceDiagram-3.0.5.zip 是一个...总之,SequenceDiagram-3.0.5.zip 是一个用于创建和管理序列图的资源包,它简化了序列图的绘制过程,提升了软件设计和开发的可视化水平,是软件工程师和系统分析师的重要辅助工具。

    oracle中sequence介绍及应用

    #### 四、Sequence的管理和维护 ##### 修改Sequence 除起始值`start WITH`外,其他所有属性都可以通过`ALTER SEQUENCE`命令进行修改。 ```sql ALTER SEQUENCE [increment BY n] [minvalue n | nomaxvalue] ...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    京东金融数据库开发管理规范-SEQUENCE

    ### 京东金融数据库开发管理规范-SEQUENCE #### 一、引言 1. **背景及目的** - 在京东金融的实际应用中,为了保证数据的一致性和安全性,特别是对于那些依赖于序列(sequence)生成唯一标识符的场景,制定统一且...

    演示Sequence容器vector

    本篇文章将专注于一种重要的Sequence容器——`vector`,并探讨其与其他Sequence容器如`list`和`deque`的使用、性能差异以及内部实现原理。 首先,`vector`是一种动态数组,它支持随机访问和连续存储。在构造`vector...

    Java高级互联网MCA架构师 美团leaf源码分析

    Segment管理负责分配一段连续的ID范围给每个节点,而Sequence管理则是在每个节点内部生成连续的序列号。这种设计思路既保证了全局唯一性,又实现了局部的高性能。 在源码层面,Leaf的实现涉及到多个关键组件。如`...

    oracle 存储过程使用 sequence

    Oracle存储过程是数据库管理系统中一个非常重要的特性,它允许开发者编写包含一系列SQL和PL/SQL语句的程序单元,以实现更复杂的业务逻辑。在Oracle中,Sequence则是一种自增序列号生成器,通常用于主键或者唯一标识...

    Mycat-server-1.6.7.3-release-20190809210613-linux.tar.gz

    Server负责处理客户端请求,Frontend Connector负责与客户端连接,Router根据分片规则进行数据路由,Schema定义了数据的分片策略,DataNode是实际存储数据的节点,Sequence管理全局唯一ID。 2. **分片策略** Mycat...

    前端开源库-gulp-run-sequence

    **前端开源库-Gulp-Run-Sequence** 在前端开发中,构建流程自动化是提高效率的关键。Gulp 是一个流行的 JavaScript 打包工具,它允许开发者通过编写任务来自动化常见的前端工作,如编译 CSS、压缩 JS、处理图片等。...

    在MySQL中创建实现自增的序列(Sequence)的教程

    项目应用中,曾有以下一个场景: 接口中要求发送一个int类型的流水号,由于多线程模式,如果...第一步:创建–Sequence 管理表 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(50) NOT NULL,

    Edward Grefenstette - Beyond Sequence to Sequence with Augmented RNNs

    通过在RNN中加入寄存器机结构,模型可以更高效地管理和操作信息。这种方法尤其适用于那些需要精确控制数据流和状态更新的任务,例如逻辑推理和程序执行等。 #### 序列到序列模型的应用实例 文档中提供了一个简单的...

    使用JDeveloper开发WEB应用时同时使用Oracle的sequence和trigger

    通过以上步骤,开发者可以在JDeveloper中有效地利用Oracle的sequence和trigger特性,实现Web应用中的数据管理和逻辑控制。这不仅可以提高开发效率,也有助于保持数据的一致性和完整性。在实际项目中,应根据具体需求...

    ORACLE SEQUENCE的简单介绍

    在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **SEQUENCE** 的机制来完成类似的操作。SEQUENCE 在 Oracle 中...

    主键生成器sequence

    ### 主键生成器sequence在Oracle中的应用 #### 一、概述 在数据库设计与开发过程中,经常需要为数据表中的某列(通常是主键)自动分配一个唯一且递增的值,以确保每一行记录的独特性。Oracle数据库提供了一种非常...

    DNA Sequence Alignment Using Dynamic Programming

    总结来说,"DNA Sequence Alignment Using Dynamic Programming by C#"涉及到将生物学的DNA序列比对问题与计算机科学的动态规划方法相结合,利用C#语言进行编程实现。这个过程涵盖了全局和局部比对算法、动态规划...

    Hibernate主键策略-sequence

    在Java的持久化框架Hibernate中,主键策略是管理数据库记录唯一标识的重要组成部分。主键策略定义了如何生成和管理实体对象的主键值。在本篇内容中,我们将深入探讨"Hibernate主键策略-sequence",并结合标签中的...

Global site tag (gtag.js) - Google Analytics