序列是一个数据库对象,它允许自动生成值,例如,支票号。序列特别适合于生成唯一键值这一任务。应用程序可以使用序列来避免用于跟踪数字的列值所引起的可能的并行性和性能问题。与在数据库外部创建的数字相比,序列的优点在于数据库服务器将跟踪生成的数字。崩溃和重新启动不会导致生成重复的数字。
生成的序号具有下列属性:
- 值可以是小数位为零的任何精确数字数据类型。这样的数据类型包括:SMALLINT、BIGINT、INTEGER 和 DECIMAL。
- 连续值之间可以有任何指定的整数增量。缺省递增值是 1。
- 计数器值是可恢复的。当需要恢复时,从日志中重建计数器值。
- 可以高速缓存值以改善性能。在高速缓存中预分配并存储值,可以在为序列生成值时减少对日志的同步 I/O。在系统出现故障时,将认为尚未使用的所有高速缓存值已丢失。为 CACHE 指定的值是可能丢失的序列值的最大数目。
有两种表达式可与序列一起使用:
- NEXT VALUE 表达式:它对指定序列返回下一个值。当 NEXT VALUE 表达式指定序列的名称时,将生成一个新的序号。但是,如果一个查询中有多个 NEXT VALUE 表达式的实例指定同一序列名,那么对于结果的每一行,序列计数器仅递增一次,且 NEXT VALUE 的所有实例对结果的每一行返回同一个值。
- PREVIOUS VALUE 表达式:对于当前应用程序进程中的先前语句,该表达式对指定序列返回最新生成的值。也就是说,对于任何给定连接,PREVIOUS VALUE 将保持不变,即使另一个连接调用 NEXT VALUE 也是如此。
有关这些表达式的完整详细信息和示例,请参阅序列引用。