W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
ALTER SEQUENCE — 更改一個序列發(fā)生器的定義
ALTER SEQUENCE [ IF EXISTS ] name [ AS data_type ] [ 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 | CURRENT_USER | SESSION_USER }ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_nameALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema
ALTER SEQUENCE
更改一個現(xiàn)有序列發(fā)生器的參數(shù)。 任何沒有在ALTER SEQUENCE
命令中明確設(shè)置的參數(shù) 保持它們之前的設(shè)置。
要使用ALTER SEQUENCE
,你必須擁有該序列。要更改一個序列 的模式,你還必須擁有新模式上的CREATE
特權(quán)。要更改擁有者,你還必須 是新?lián)碛薪巧囊粋€直接或者間接成員,并且該角色必須具有該域的模式上的 CREATE
特權(quán)(這些限制強制修改擁有者不能做一些通過刪除和重 建該序列做不到的事情。不過,一個超級用戶怎么都能更改任何序列的所有權(quán)。)。
name
要修改的序列的名稱(可以是模式限定的)。
IF EXISTS
在序列不存在時不要拋出一個錯誤。這種情況下會發(fā)出一個提示。
data_type
可選子句AS
改變序列的數(shù)據(jù)類型。有效類型是data_type
smallint
、integer
和bigint
。
當(dāng)且僅當(dāng)先前的最小值和最大值是舊數(shù)據(jù)類型的最小值或最大值時(換句話說, 如果序列是使用NO MINVALUE
或NO MAXVALUE
, 隱式或顯式創(chuàng)建的),則更改數(shù)據(jù)類型會自動更改序列的最小值和最大值。 否則,將保留最小值和最大值,除非將新值作為同一命令的一部分給出。 如果最小值和最大值不符合新的數(shù)據(jù)類型,則會生成錯誤。
increment
子句INCREMENT BY
是可選的。 一個正值將產(chǎn)生一個上升序列,一個負值會產(chǎn)生一個下降序列。如果 沒有指定,舊的增量值將被保持。increment
minvalue
NO MINVALUE
可選的子句MINVALUE
決定一個序列 能產(chǎn)生的最小值。如果指定了minvalue
NO
MINVALUE
,上升序列和下降序列的默認(rèn)值分別是 1 和 數(shù)據(jù)類型的最小值。如果這些選項都沒有被指定,將保持當(dāng)前的 最小值。
maxvalue
NO MAXVALUE
可選的子句MAXVALUE
決定一個序列 能產(chǎn)生的最大值。如果指定了maxvalue
NO
MAXVALUE
,上升序列和下降序列的默認(rèn)值分別是 數(shù)據(jù)類型的最大值和 -1。如果這些選項都沒有被指定,將保持當(dāng)前的 最大值。
start
可選的子句START WITH
更改該序列被記錄的開始值。 這對于當(dāng)前序列值沒有影響,它會簡單地設(shè)置 未來start
ALTER SEQUENCE RESTART
命令將會使用的值。
restart
可選的子句RESTART [ WITH
更改該序列的 當(dāng)前值。這類似于用restart
]is_called
= false
調(diào)用setval
函數(shù):被指定的值將會被 下一次nextval
調(diào)用返回。寫上沒有 restart
值的
RESTART
等效于提供被 CREATE SEQUENCE
記錄的或者上一次被 ALTER SEQUENCE START WITH
設(shè)置的開始值。
與setval
調(diào)用相比,序列上的RESTART
操作是事務(wù)性的并阻止并發(fā)事務(wù)從同一序列中獲取數(shù)字。 如果這不是所需的操作模式,則應(yīng)使用setval
。
cache
子句CACHE
使得序列數(shù)字被預(yù)先 分配并且保存在內(nèi)存中以便更快的訪問。最小值是 1(每次只產(chǎn)生一個值,即 無緩存)。如果沒有指定,舊的緩沖值將被保持。cache
CYCLE
可選的CYCLE
關(guān)鍵詞可以被用來允許該序列在達到 maxvalue
(上升序列)或 minvalue
(下降序列)時 回卷。如果到達該限制,下一個被產(chǎn)生的數(shù)字將分別是 minvalue
或者 maxvalue
。
NO CYCLE
如果指定了可選的NO CYCLE
關(guān)鍵詞,任何在該 序列到達其最大值后的nextval
調(diào)用將會返回 一個錯誤。如果既沒有指定CYCLE
也沒有指定 NO CYCLE
,舊的循環(huán)行為將被保持。
OWNED BY
table_name
.column_name
OWNED BY NONE
OWNED BY
選項導(dǎo)致該序列與一個特定的表列相關(guān)聯(lián), 這樣如果該列(或者整個表)被刪除,該序列也會被自動刪除。如果指定, 這種關(guān)聯(lián)會替代之前為該序列指定的任何關(guān)聯(lián)。被指定的表必須具有相同的 擁有者并且與該序列在同一個模式中。指定 OWNED BY NONE
可以移除任何現(xiàn)有的關(guān)聯(lián),讓該序列 “自立”。
new_owner
該序列的新?lián)碛姓叩挠脩裘?/p>
new_name
該序列的新名稱。
new_schema
該序列的新模式。
ALTER SEQUENCE
將不會立即影響除當(dāng)前后端外 其他后端中的nextval
結(jié)果,因為它們有預(yù)分配(緩存)的序列 值。在注意到序列生成參數(shù)被更改之前它們將用盡所有緩存的值。當(dāng)前后端將被 立刻影響。
ALTER SEQUENCE
不會影響該序列的 currval
狀態(tài)(在 PostgreSQL 8.3 之前有時會影響)。
ALTER SEQUENCE
阻塞并發(fā)nextval
、 currval
、lastval
和 setval
調(diào)用。
由于歷史原因,ALTER TABLE
也可以被用于序列, 但是只有等效于上述形式的ALTER TABLE
變體才被 允許用于序列。
在 105 重啟一個被稱為serial
的序列:
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
符合SQL
標(biāo)準(zhǔn),不過AS
、START WITH
、 OWNED BY
、OWNER TO
、RENAME TO
以及
SET SCHEMA
子句是 PostgreSQL擴展。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: