ALTER SEQUENCE
ALTER SEQUENCE — 更改序列发生器的定义
大纲
ALTER SEQUENCEname[ INCREMENT [ BY ]increment] [ MINVALUEminvalue| NO MINVALUE ] [ MAXVALUEmaxvalue| NO MAXVALUE ] [ RESTART [ WITH ]start] [ CACHEcache] [ [ NO ] CYCLE ]
描述
ALTER SEQUENCE更改现有序列发生器的参数。在
ALTER SEQUENCE命令中未明确设置的参数,会保留其原有设置。
参数
name要更改的序列名称(可以是模式限定的)。
increment子句
INCREMENT BY是可选的。正值会创建升序序列,负值会创建降序序列。如果未指定,则保留原有的增量值。incrementminvalueNO MINVALUE可选子句
MINVALUE确定序列可生成的最小值。如果指定了minvalueNO MINVALUE,则升序序列和降序序列将分别使用默认值 1 和 -263-1。如果两种选项都未指定,则保留当前最小值。maxvalueNO MAXVALUE可选子句
MAXVALUE确定序列的最大值。如果指定了maxvalueNO MAXVALUE,则升序序列和降序序列将分别使用默认值 263-1 和 -1。如果两种选项都未指定,则保留当前最大值。start可选子句
RESTART WITH更改序列的当前值。startcacheCACHE子句启用预分配序列号并将其存储在内存中,以便更快访问。最小值为 1(一次只能生成一个值,即不缓存)。如果未指定,则保留旧的缓存值。cache- CYCLE
可选的
CYCLE关键字可用于启用序列回绕:当递增或递减序列分别达到maxvalue或minvalue时回绕。如果达到限制,下一个生成的数将分别为minvalue或maxvalue。- NO CYCLE
如果指定了可选关键字
NO CYCLE,则当序列达到其最大值后,任何对nextval的调用都会返回错误。如果既未指定CYCLE也未指定NO CYCLE,则保留原有的循环行为。
示例
将一个名为serial的序列重启到 105:
ALTER SEQUENCE serial RESTART WITH 105;
注解
为了避免阻塞从同一序列获取数字的并发事务,ALTER SEQUENCE永远不会被回滚;更改会立即生效且不可逆转。
ALTER SEQUENCE不会立即影响除当前后端之外、已经预分配(缓存)了序列值的其他后端中的
nextval结果。它们会先用完所有缓存值,然后才会注意到序列参数已经改变。当前后端则会立即受到影响。
兼容性
ALTER SEQUENCE符合SQL:2003。