Oracle Sequence 是一种数据库系统提供的自动递增数字序列,常用于生成数据库数据记录的自增长主键或序号。
简介
Oracle Sequence是一种特殊的数据库对象,它能够按照一定的规则自动递增数字序列。这种序列通常作为代理主键使用,因为它具有唯一性且无其他含义。Sequence是数据库系统的一个特性,不同数据库对其支持程度不同。例如,Oracle数据库、DB2、PostgreSQL等数据库支持Sequence,而MySQL、SQL Server、sybase等则不支持。
操作方法
创建
创建Sequence需要具备相应的权限,如CREATE SEQUENCE或CREATE ANY SEQUENCE。具体语法包括指定序列名、递增值、起始值、最大值、循环模式以及缓存数量。创建完成后,可通过CURRVAL和NEXTVAL函数获取序列的当前值和下一个值。需要注意的是,首次调用NEXTVAL将返回初始值,此后每次调用都将递增并返回新的值。CURRVAL始终返回当前序列值,但在首次NEXTVAL初始化后方可使用。若指定CACHE值,Oracle数据库将在内存中预置序列,提高性能。为了避免序列值丢失,可在创建时使用NOCACHE选项。
Alter
修改Sequence需要拥有相应权限,如ALTER ANY SEQUENCE。可以更改除起始值外的所有参数。若要更改起始值,需先删除再重新创建。示例代码展示了如何通过ALTER命令修改序列参数。
Drop
删除Sequence只需使用DROP SEQUENCE语句。
区别与联系
Sequence与identity的作用相似,都能生成自增数字序列。Sequence是独立于表的对象,而identity仅适用于特定表的某列。
使用
NEXTVAL
首次访问序列时,必须先调用NEXTVAL以初始化序列。后续调用将继续递增并返回新的值。在同一SQL中,即使多次调用NEXTVAL,序列也只会递增一次。在PL/SQL中,可以使用NEXTVAL和CURRVAL函数获取序列值。
CURRVAL
CURRVAL函数返回序列的当前值,即上次NEXTVAL调用的结果。无论其他用户是否增加了序列,都可以继续使用CURRVAL访问该值。在同一个SQL语句中,无论CURRVAL和NEXTVAL的顺序如何,它们都将返回相同的值。
并发访问
序列在多用户并发访问时也能保持唯一性,每个用户生成的值对于其他用户而言是唯一的。
限制
NEXTVAL和CURRVAL仅在SQL语句中有效,不直接在PL/SQL中生效。在SQL语句中,这些运算符有一些限制条件。
实现自动增加ID
在Oracle数据库中,可以通过创建Sequence并使用NEXTVAL函数来模拟自动增加ID的功能。
数字序列
在不同数据库中,创建数字序列的方法略有不同。Oracle、DB2、PostgreSQL都有各自的语法和参数设置。
引用参数
在Oracle、DB2、PostgreSQL中,引用Sequence值的参数均为currval和nextval,分别代表当前值和下一个值。
参考资料
Oracle中的序列(Sequence)是一种数据库对象.CSDN博客.2024-11-01
Oracle数据库如何实现自增-序列Sequence介绍.51CTO博客.2024-11-01
Oracle对象:序列(sequence)介绍.ITPUB.2024-11-01