ORACLE-序列
序列
简介:Oracle的序列是一种数据库对象,其主要工作是用来为表产生唯一值。序列被创建后可以通过数据字典找到序列对象,因此序列可以被多个对象共享。
序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。序列由一个Oracle内部程序产生并增加或减少。序列号独立于表被存储和生成,因此,相同的序列可以被多个表使用。
-
创建序列:创建emp_seq序列从1开始进行累加,步进值为1,最大值为9999999,不循环生成也不进行缓存:
CREATE SEQUENCE emp_seq INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;
注:如果序列用于产生主键值,不建议使用CYCLE选项。
序列并不依赖于某一个表,一个序列可以在多个数据库表之间进行共享。
-
NEXTVAL和CURRVAL伪列
每个序列都具有两个伪列用来允许使用序列的表来获取序列的值。
NEXTVAL:返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于不同的用户也是如此。
CURRVAL:获得当前的序列值。 -
使用序列
使用NEXTVAL和CURRVAL的一些规则:
可以在下面的上下文中使用NEXTVAL和CURRVAL:
不是子查询的一部分的SELECT语句的字段列表。
INSERT语句中子查询的SELECT列表。
INSERT语句中的VALUES子句。
UPDATE语句中的SET子句。
不能在下面的上下文中使用NEXTVAL和CURRVAL:
视图的SELECT列表。
带DISTINCT关键字的SELECT语句。
带GROUP BY、HAVING或ORDER BY子句的SELECT语句。
在SELECT、DELETE或UPDATE语句中的子句。
在CREATE TABLE或ALTER TABLE语句中的DEFAULT表达式。 -
修改序列
修改序列的限制:
不能改变序列的起始值,为了以不同的数字重新开始一个序列,必须先删除序列再重新创建。
序列的最小值不能大于序列的当前值。
序列的最大值不能小于序列的当前值。
修改后的序列规则不影响以前的序列值,只有未来的序列值会受到影响。
用户必须具有ALTER SEQUENCE的权限。 -
删除序列
DROP SEQUENCE emp_seq;
更多推荐
所有评论(0)