SERIAL 数据类型具有带特殊功能的、INTEGER 的正的非零范围。同样,BIGSERIAL 和 SERIAL8 数据类型具有带特殊功能的 INT8 的正的非零范围。每当将新行插入表中时,数据库服务器都将自动生成 BIGSERIAL、SERIAL 或 SERIAL8 列的新值。
一个表只能有一个 SERIAL 列,但是它可以具有一个 SERIAL 列和一个 SERIAL8 列或 BIGSERIAL 列。因为数据库服务器将生成值,所以新行中的序列值总是不相同的,即使多个用户同时添加行亦如此。由于普通程序很难在那些情况下生成唯一的数字代码,所以此服务很有用。 (然而,GBase 8s 也支持序列对象,序列对象也可通过 CURRVAL 和 NEXTVAL 运算符支持该功能。有关顺序对象的更多信息,请参阅 GBase 8s SQL 指南:语法 中对 CREATE SEQUENCE 的描述。
SERIAL 数据类型最多可以生成 231–1 个正整数。因此,数据库服务器将使用所有的正数序列号,直到它在表中插入 231–1 行为止。然而,对于大多数用户来说,并不用担心发生用完正数序列号的问题,因为单个应用程序需要在 68 年内每秒插入一行,或者 68 个应用程序需要在一年内每秒插入一行,才能用完所有正数序列号。但是,如果已使用了所有的正数序列号,那么数据库服务器将回绕并开始生成以 1 开始的整数值。
BIGSERIAL 和 SERIAL8 数据类型最多可以生成 263 –1 个正整数。使用合理的起始值,实际上不可能导致这些类型的值在插入期间回绕。
对于这些数据类型,所生成数字的序列总是递增的。从表中删除行之后,它们的序列号将不重复使用。根据这些类型的列进行排序的行是按其创建顺序来返回的。
可以在 CREATE TABLE 语句中指定 BIGSERIAL、SERIAL 或 SERIAL8 列中的初始值。这使得在不同的表中生成系统指定的键的不同子序列成为可能。stores_demo 数据库使用了此技术。在 stores_demo 中,客户号从 101 开始,而订单号从 1001 开始。如果这家小企业注册的客户数不超过 899 个,所有客户号都将为三位数,并且订单号为四位数。
BIGSERIAL、SERIAL 或 SERIAL8 列不会自动成为唯一列。如果要完全确保不出现重复的序列号,那么必须应用唯一约束(请参阅使用 CREATE TABLE)。如果使用 DB-Access 中的交互式模式编辑器来定义表,那么它将对任何 BIGSERIAL、SERIAL 或 SERIAL8 列自动应用唯一约束。
有关 SERIAL、SERIAL8 和 BIGSERIAL 数据类型在表层次结构中的使用和行为的信息,请参阅表层次结构中的 SERIAL 类型。