站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Sequence
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
'''Sequence''' ,是[[数据库]]系统按照一定规则自动增加的数字序列。这个序列一般作为代理[[主键]](因为不会重复),没有其他任何意义。Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如[[Oracle]]、[[DB2]]、[[PostgreSQL]]数据库有Sequence,[[MySQL]]、[[SQL Server]]、[[Sybase]]等数据库没有Sequence。Sequence是数据库中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用,不过各个数据库厂商各有各的一套对Sequence的定义和操作。 == 如何使用Sequence== *定义Sequence 定义一个seq_test,最小值为10000,最大值为99999999999999999,从20000开始,增量的步长为1,[[缓存]]为20的循环排序Sequence。 1、Oracle的定义方法: <pre> create sequence seq_test minvalue 10000 maxvalue 99999999999999999 start with 20000 increment by 1 cache 20 cycle order; </pre> 2、DB2的写法: <pre> create sequence seq_test as bigint start with 20000 increment by 1 minvalue 10000 maxvalue 99999999999999999 cycle cache 20 order; </pre> 3、PostgreSQL的写法: <pre> create sequence seq_test increment by 1 minvalue 10000 maxvalue 99999999999999999 start 20000 cache 20 cycle; </pre> *Oracle、DB2、PostgreSQL数据库Sequence值的引用参数为:currval、nextval,分别表示当前值和下一个值。下面分别从三个数据库的Sequence中获取nextval的值。 1、Oracle中:seq_test.nextval 例如: select seq_test.nextval from dual; 2、DB2中:nextval for SEQ_TOPICMS 例如: values nextval for seq_test; 3、PostgreSQL中:nextval(seq_test) 例如: select nextval('seq_test'); *Sequence与indentity的区别与联系 1、Sequence与indentity的基本作用都差不多。都可以生成自增数字序列。 2、Sequence是数据库系统中的一个[[对象]],可以在整个数据库中使用,和表没有任何关系;indentity仅仅是指定在表中某一列上,作用范围就是这个表。 *postgresql中的Sequence分配策略(postgresql8.3.x) 1、调用select nextval(seq_test);后,系统马上分配一个序号给用户,然后系统的次Sequence马上加上之前设置的步长(increment by 1),不论此序号用户是否使用。 2、调用select currval(seq_test);返回当前的序列号,该序列号只要没有使用,就不会变化,直到被使用后,才会变化,并且该序列号已经分配给当前请求,不会再分配给其他的请求。 3、所以,减少浪费时,使用currval,不在乎浪费,而且[[id]]不连续的话,可以使用nextval。因为一旦分配给你后,使用失败,将会把该序列号丢弃! ==oracle sequence== ;1、Create Sequence *首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, <pre> CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; </pre> *一旦定义了emp_sequence,就可以用CURRVAL,NEXTVAL , CURRVAL=返回 sequence的当前值, NEXTVAL=增加sequence的值,然后返回 sequence 值 比如: emp_sequence.CURRVAL emp_sequence.NEXTVAL *可以使用sequence的地方: #不包含子查询、snapshot、VIEW的 SELECT 语句 # INSERT语句的子查询中 # NSERT语句的VALUES中 # UPDATE 的 SET中 可以看如下例子: <pre> INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.currval FROM DUAL; </pre> *需要注意的是: #第一次NEXTVAL返回的是初始值;随后的[[NEXTVAL]]会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。 #一次NEXTVAL会增加一次SEQUENCE的值。但是如果你在同一个条[[SQL]]语句里面针对同一个sequence使用多次NEXTVAL,其值都是一样的。 #如果指定[[CACHE]]值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然发生故障(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。 ;2、Alter Sequence *有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create . *Alter sequence 的例子 <pre> ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000后从头开始 NOCACHE ; </pre> *影响Sequence的初始化参数: #SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。 #可以很简单的Drop Sequence #DROP SEQUENCE order_seq; ==相关条目== *[[oracle]] *[[UML]] *[[database]] *[[数据库]] *[[SQL]] ==参考来源== *http://baike.soso.com/v7887142.htm?sp=SSTSequence *http://baike.baidu.com/view/1209094.htm [[category:数据库|S]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)