简介: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;
    
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐