在 PostgreSQL 資料庫中,Sequence
是一種特殊的表物件,主要用於生成按順序遞增或遞減的數字序列,通常用於需要唯一識別符號的場景,例如自增 ID。以下是如何在 PostgreSQL 中使用 Sequence
的詳細步驟。
1. 建立 Sequence
你可以使用 CREATE SEQUENCE
語句來建立一個序列。
CREATE SEQUENCE my_sequence;
預設情況下,序列從 1 開始,每次遞增 1。你可以指定其他選項,例如起始值、最小值、最大值、遞增步長等。
CREATE SEQUENCE my_sequence START 100 INCREMENT 10 MINVALUE 50 MAXVALUE 500 CYCLE;
START
: 序列的起始值。INCREMENT
: 每次呼叫nextval
時增加的值。MINVALUE
: 序列的最小值。MAXVALUE
: 序列的最大值。CYCLE
: 當達到最大值時,序列會重新從最小值開始。
2. 使用 nextval
獲取下一個值
你可以使用 nextval()
函式來獲取序列的下一個值。
SELECT nextval('my_sequence');
每次呼叫 nextval()
,序列的值都會遞增並返回新的值。
3. 使用 currval
獲取當前值
你可以使用 currval()
函式來獲取當前會話中序列的當前值。
SELECT currval('my_sequence');
注意:在當前會話中,必須至少呼叫過一次 nextval()
後,currval()
才能返回值。
4. 使用 setval
設定序列的值
你可以使用 setval()
函式來手動設定序列的當前值。
SELECT setval('my_sequence', 500);
你還可以選擇是否在設定後遞增序列:
SELECT setval('my_sequence', 500, false);
第二個引數是新的值。
第三個引數是布林值,
true
表示下一次呼叫nextval()
會在此值基礎上遞增,false
表示下一次呼叫nextval()
會直接返回這個值。
5. 刪除 Sequence
如果你不再需要一個序列,可以使用 DROP SEQUENCE
語句來刪除它。
DROP SEQUENCE my_sequence;
6. 在表中使用 Sequence
通常情況下,序列與表的列(例如自增 ID)結合使用。你可以在建立表時將序列與列關聯。
CREATE TABLE my_table ( id SERIAL PRIMARY KEY, -- SERIAL 是使用 Sequence 的簡便方式 name VARCHAR(50) );
SERIAL
資料型別實際上是 PostgreSQL 的一種簡便寫法,它會自動建立一個序列並將其與該列繫結。
你也可以手動指定使用某個序列:
CREATE SEQUENCE my_sequence; CREATE TABLE my_table ( id INTEGER PRIMARY KEY DEFAULT nextval('my_sequence'), name VARCHAR(50) );
7. 檢視現有的 Sequence
你可以透過查詢系統表 pg_sequences
來檢視資料庫中所有的序列。
SELECT * FROM pg_sequences WHERE sequencename = 'my_sequence';
8. 重置序列
有時你可能需要重置序列的值,例如當表中的資料被刪除並重新插入時,你可能希望序列從某個值重新開始。
SELECT setval('my_table_id_seq', 1);
總結
CREATE SEQUENCE
用於建立序列。nextval()
用於獲取序列的下一個值。currval()
用於獲取序列的當前值。setval()
用於設定序列的值。DROP SEQUENCE
用於刪除序列。SERIAL
是 PostgreSQL 提供的一種簡便方式,用於自動建立和管理序列。
透過這些操作,你可以在 PostgreSQL 中靈活地使用序列來生成和管理唯一識別符號。