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;