CREATE SEQUENCE

原创 2007年09月19日 17:00:00

CREATE SEQUENCE

名称

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


输入

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) 调用将返回所给的值加上序列增值.

使用象


这样的查询可以获得序列的参数.除了获取最初的参数外,你可以用


获得后端分配的最后一个值.parameters, you can use (译注:?好象没写完)

底层的锁定用于令多个请求同时调用生成器成为可能.

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

注意

请参考 DROP SEQUENCE 语句来删除序列.

每个后端使用其自身的缓存来存储分配的数字.已分配但当前会话没有使用的数字将丢失,导致序列里面出现"空洞".

用法

创建一个叫 serial 的递增序列,从101开始:


从此序列中选出下一个数字


在一个 INSERT 中使用此序列:


在一个 COPY FROM 后设置序列:


兼容性

SQL92

CREATE SEQUENCE 是 Postgres 语言扩展.在 SQL92 里没有 CREATE SEQUENCE 语句.

 

Create Sequence

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或...
  • li_xiao_ming
  • li_xiao_ming
  • 2012年12月11日 09:52
  • 2351

43.Evaluate the following CREATE SEQUENCE statement:

43.Evaluate the following CREATE SEQUENCE statement:
  • dwj19830118
  • dwj19830118
  • 2016年02月24日 17:58
  • 965

OCP-1Z0-051-V9.02-43题

43. Evaluate the following CREATE SEQUENCE statement: CREATE SEQUENCE seq1 START WITH 100 INCREME...
  • rlhua
  • rlhua
  • 2013年10月16日 14:21
  • 8281

Cocos2dx 3.0 过渡篇(十三) action的用法从一个故事说起

本篇博客来自star特530,转载请注明出处。http://blog.csdn.net/start530/article/details/20153367 ------------- 动作到底该怎...
  • xiebaochun
  • xiebaochun
  • 2014年04月15日 17:20
  • 8001

ORACLE SEQUENCE 详解

1.    About Sequences(关于序列) 序列是数据库对象一种。多个用户可以通过序列生成连续的数字以此来实现主键字段的自动、唯一增长,并且一个序列可为多列、多表同时使用。 序列消除了串行...
  • IndexMan
  • IndexMan
  • 2014年07月10日 12:28
  • 42403

OCP-1Z0-051 第43题 序列的cycle选项

一、原题 Evaluate the following CREATE SEQUENCE statement: CREATE SEQUENCE seq1 START WITH 100 INCRE...
  • hollo_hhy
  • hollo_hhy
  • 2014年05月06日 14:03
  • 3059

oracle create table CREATE SEQUENCE学习

转自http://blog.sina.com.cn/s/blog_630d50dc0100hlph.html 首先,你要有一张表! CREATE TABLE example( ID Number(...
  • linbrain0000
  • linbrain0000
  • 2014年03月29日 15:45
  • 608

MySQL中的 create sequence 错误

MySQL中的 create sequence 错误我在Windows下面安装了一个MySQL,然后我尝试在里面创建一个sequence,使用create sequence语句,但是失败,说语法错误m...
  • moe26
  • moe26
  • 2009年04月14日 11:29
  • 1504

SEQUENCE参数之CYCLE,MINVALUE

现象:一个seqence设置了cycle属性,但当达到最大值时,不是从start with设置的值开始循环。而是从1开始循环。 问:当sequence达到最大值时,如何指定循环的起始值。 在创建s...
  • lwei_998
  • lwei_998
  • 2011年08月10日 14:36
  • 5075

sequence使用

SQL> create sequence seq1 minvalue 1 maxvalue 999999999999999999999999999 start with 0 increment...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2013年12月22日 15:45
  • 575
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CREATE SEQUENCE
举报原因:
原因补充:

(最多只允许输入30个字)