PostgreSQL-9.6.8创建序列、修改序列、删除序列的语法教程

1. 创建序列

语法:

CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
    [ OWNED BY { table_name.column_name | NONE } ]

参数说明:

TEMPORARY 或 TEMP
如果声明了这个修饰词,那么该序列对象只为这个会话创建, 并且在会话结束的时候自动删除。在临时序列存在的时候, 除非用模式修饰的名字引用,否则同名永久序列是不可见的(在同一会话里)。

name
将要创建的序列名(可以用模式修饰)

increment
可选子句INCREMENT BY increment指定序列的步长。 一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。缺省值是 1 。

minvalue
NO MINVALUE
可选的子句MINVALUE minvalue 指定序列的最小值。如果没有声明这个子句或者声明了NO MINVALUE, 那么递增序列的缺省为 1 ,递减序列的缺省为-263-1。

maxvalue
NO MAXVALUE
可选的子句MAXVALUE maxvalue 指定序列的最大值。如果没有声明这个子句或者声明了NO MAXVALUE, 那么递增序列的缺省为263-1,递减序列的缺省为 -1 。

start
可选的子句START WITH start 指定序列的起点。缺省初始值对于递增序列为minvalue, 对于递减序列为maxvalue。

cache
可选的子句CACHE cache 为快速访问而在内存里预先存储多少个序列号。最小值(也是缺省值)是 1 , 表示一次只能生成一个值,也就是说没有缓存。

CYCLE
NO CYCLE
CYCLE选项可用于使序列到达 maxvalue或 minvalue时可循环并继续下去。 也就是如果达到极限,生成的下一个数据将分别是 minvalue 或maxvalue。
如果声明了NO CYCLE,那么在序列达到其最大值之后任何对 nextval的调用都将返回一个错误。 如果既没有声明CYCLE也没有声明NO CYCLE, 那么NO CYCLE是缺省。

OWNED BY table_name.column_name
OWNED BY NONE
OWNED BY选项将序列关联到一个特定的表字段上。这样, 在删除那个字段或其所在表的时候将自动删除绑定的序列。 指定的表和序列必须被同一个用户所拥有,并且在在同一个模式中。 默认的OWNED BY NONE表示不存在这样的关联。

实例:

create sequence serial 
increment by 2
minvalue 1
no maxvalue
start with 1;

select nextval('serial');

2. 修改序列

语法:

ALTER SEQUENCE [ IF EXISTS ] name [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ] [ [ NO ] CYCLE ]
    [ OWNED BY { table_name.column_name | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner
ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

参数说明:

name
一个要修改的序列的名字(可以有模式修饰)。

IF EXISTS
当序列不存在时使用该选项不会出现错误消息,仅有一个通知。

increment
INCREMENT BY increment选项是可选的。 一个正数会让序列成为递增序列,负数则成为递减序列。如果没有声明,将沿用原来的递增值。

minvalue
NO MINVALUE
MINVALUE minvalue是一个可选选项,它决定一个序列可以生成的最小的值。 如果声明了NO MINVALUE,那么将使用缺省值,对于递增和递减的序列分别是1和-263-1。 如果没有声明则沿用当前的最小值。

maxvalue
NO MAXVALUE
MAXVALUE maxvalue是一个可选选项,它决定一个序列可以生成的最大的值。 如果声明了NO MAXVALUE那么将使用缺省值,对于递增和递减的序列分别是263-1和-1。 如果没有声明则沿用当前的最大值。

start
START WITH start是一个可选选项,它修改序列的起始值。 这对序列当前值没有影响;它仅设置将来的ALTER SEQUENCE RESTART命令将会使用的值。

restart
RESTART [ WITH restart ]是一个可选选项,它改变序列的当前值。 这相当于用is_called = false参数调用setval 函数 :指定的值将会通过nextval的next调用返回。 不使用restart参数值来使用RESTART选项相当于使用CREATE SEQUENCE或由ALTER SEQUENCE START WITH设置的初始值。

cache
CACHE cache选项打开序列号预分配功能以及为了快速存取而在内存中存储的功能。 最小值是1(表示每次只能生成一个数值,没有缓冲)。如果没有声明,将沿用旧的缓冲值。

CYCLE
可选的 CYCLE选项用于设置升序序列或是降序序列在达到maxvalue或者minvalue的时候循环使用。 如果达到了极限, 那么生成的下一个数字将分别是minvalue或者maxvalue。

NO CYCLE
如果声明了可选的NO CYCLE选项,任何在序列达到其极限后对nextval的调用都将返回错误。 如果未声明CYCLE或者NO CYCLE,那么将沿用原有的循环行为。

OWNED BY table_name.column_name
OWNED BY NONE
OWNED BY选项将序列和一个表的特定字段关联, 这样,如果那个字段(或整个表)被删除了,那么序列也将被自动删除。 如果序列已经与表有关联后,使用这个选项后新关联将覆盖旧有的关联。 指定的表必须与序列的所有者相同并且在同一个模式中。 使用OWNED BY NONE将删除任何已经存在的关联,也就是让该序列变成"独立"序列。

new_owner
序列新所有者的用户名。

new_name
序列的新名称。

new_schema
序列的新模式。

实例:

修改serial序列的起始值和步长。

alter sequence serial
increment by 3
restart with 10;

select nextval('serial');

3. 删除序列

语法:

DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

参数说明:

IF EXISTS
如果指定的序列不存在,那么发出一个 notice 而不是抛出一个错误。

name
序列名(可以有模式修饰)。

CASCADE
级联删除依赖序列的对象。

RESTRICT
如果存在任何依赖的对象,则拒绝删除序列。这个是缺省。

实例:

drop sequence serial;
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐