CREATE SEQUENCE

    注意事项

    • Sequence是一个存放等差数列的特殊表。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。
    • 如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名称不同。
    • 创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。
    • Sequence默认最大值为2^63-1,如果使用了Large标识则最大值可以支持到2^127-1。
    • 被授予CREATE ANY SEQUENCE权限的用户,可以在public模式和用户模式下创建序列。

    参数说明

    • increment

      指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。

      缺省值为1。

    • MINVALUE minvalue | NO MINVALUE| NOMINVALUE

      执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUE

    • MAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE

      执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE

    • 指定序列的起始值。缺省值:对于递增序列为minvalue,递减序列为maxvalue。

    • cache

      为了快速访问,而在内存中预先存储序列号的个数。

      缺省值为1,表示一次只能生成一个值,也就是没有缓存。

    • OWNED BY

      将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和sequence之间关联关系,并不会在插入数据时在该列上产生自增序列。

      缺省值为OWNED BY NONE,表示不存在这样的关联。

      须知:

      通过OWNED BY创建的Sequence不建议用于其他表,如果希望多个表共享Sequence,该Sequence不应该从属于特定表。

    创建一个名为serial的递增序列,从101开始:

    从序列中选出下一个数字:

    从序列中选出下一个数字:

    创建与表关联的序列:

    相关链接