PolarDB-X支援對Sequence的各種類型進行如下修改:
- 修改Simple Sequence的參數:起始值、步長、最大值、循環或非循環。
- 修改Group Sequence或單元化 Group Sequence的參數:起始值。
- 不同類型Sequence間的轉換(單元化Group Sequence除外)。
注意事項
在對Sequence的類型進行修改時,您需要注意如下事項:
- Group Sequence和單元化Group Sequence是非連續的。START WITH參數對于它們僅具有指導意義,Group Sequence和單元化Group Sequence不會嚴格按照該參數作為起始值,但是保證起始值比該參數大。
- 單元化Group Sequence不支援轉換到其它類型或修改單元化相關的參數。
- 對于Simple Sequence,如果修改Sequence時指定了START WITH,則會立即生效,下次取Sequence值時會從新的START WITH值開始。比如原先Sequene增長到100,這時把START WITH值改成了200,那麼下一次擷取的Sequence值就從200開始。
- 修改START WITH的參數值時,需要仔細評估已經産生的Sequence值,以及生成新Sequence值的速度,防止産生沖突。如非必要,請謹慎修改START WITH參數值。
Group Sequence
文法
ALTER SEQUENCE <name> [ CHANGE TO SIMPLE | TIME ]
START WITH <numeric value>
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
參數說明
參數 | 說明 |
START WITH | Sequence的起始值,無預設值,若未指定則忽略該參數,在轉換類型時必須指定。 |
INCREMENT BY | 僅在将Group Sequence轉換為Simple Sequence時有效,是Simple Sequence每次增長時的增量值(或稱為間隔值或步長),若未指定,則預設值為1。 |
MAXVALUE | 僅在将Group Sequence轉換為Simple Sequence時有效,是Simple Sequence允許的最大值,若未指定,則預設值為有符号長整型(Signed BIGINT)的最大值,即9223372036854775807。 |
CYCLE 或 NOCYCLE | 僅在将Group Sequence轉換為Simple Sequence時有效,兩者隻能選擇其一,代表當Simple Sequence值增長到最大值後,是否允許繼續循環(即從START WITH重新開始)使用該Simple Sequence,若未指定,則預設值為NOCYCLE。 |
說明 當修改的目标類型為TIME時,不支援上述參數。
單元化Group Sequence
ALTER SEQUENCE <name>
START WITH <numeric value>
單元化Group Sequence的起始值,無預設值,若未指定則忽略該參數。 |
說明 單元化Group Sequence 不支援轉換到其它類型或修改單元化相關的參數。
Time-based Sequence
ALTER SEQUENCE <name>[ CHANGE TO GROUP | SIMPLE ]
START WITH <numeric value>
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
Simple Sequence每次增長時的增量值(或稱為間隔值或步長),若未指定,則預設值為1,将Simple Sequence轉換為Group Sequence時該參數無效。 | |
Simple Sequence允許的最大值,若未指定,則預設值為有符号長整型(Signed BIGINT)的最大值,即9223372036854775807,将Simple Sequence轉換為Group Sequence時該參數無效。 | |
CYCLE或NOCYCLE | 兩者隻能選擇其一,代表當Simple Sequence值增長到最大值後,是否允許繼續循環(即仍從START WITH開始)使用該Simple Sequence,若未指定,則預設值為NOCYCLE,将Simple Sequence轉換為Group Sequence時該參數無效。 |
Simple Sequence
ALTER SEQUENCE <name> [ CHANGE TO GROUP | TIME ]
START WITH <numeric value>
[ INCREMENT BY <numeric value> ]
[ MAXVALUE <numeric value> ]
[ CYCLE | NOCYCLE ]
不同類型Sequence間的轉換
在對Sequence的不同類型進行轉換時,您需要了解如下事項:
- 通過
的ALTER SEQUENCE
子句實作。CHANGE TO
-
如果指定了ALTER SEQUENCE
子句,則強制必須加上START WITH參數,避免忘記指定起始值而造成取值時得到重複值;若沒有CHANGE TO(可選參數),則不強制。CHANGE TO
- 不支援單元化Group Sequence作為源或目标的類型轉換。
示例
- 将Simple Sequence seq4的起始值改為3000,步長改為5,最大值改為1000000,增長到最大值後改為繼續循環。語句如下:
mysql> ALTER SEQUENCE seq4 START WITH 3000 INCREMENT BY 5 MAXVALUE 1000000 CYCLE;
- 将Group Sequence轉換為Simple Sequence。
mysql> ALTER SEQUENCE seq1 CHANGE TO SIMPLE START WITH 1000000;