PostgreSQL 中的序列是用戶定義的 schema-bound 對象,它根據指定的規範生成整數序列。 CREATE SEQUENCE 語句用於在 PostgreSQL 中創建序列。
用法: CREATE SEQUENCE [ IF NOT EXISTS ] sequence_name [ AS { SMALLINT | INT | BIGINT } ] [ 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 } ]
現在讓我們分析一下上麵的語法:
- 首先,在 CREATE SEQUENCE 子句之後設置序列的名稱。 IF NOT EXISTS 僅在新序列不存在時有條件地創建它。
- 其次,指定序列的數據類型。有效數據類型為 SMALLINT、INT 和 BIGINT。如果跳過它,默認數據類型為 BIGINT。它用於確定序列的最小值和最大值。
- 增量指定將哪個值添加到當前序列值以創建新值。正數構成升序,負數構成降序。默認增量值為 1。
- 然後,我們定義序列的最小值和最大值。如果您使用 NO MINVALUE 或 NO MAXVALUE,則序列將使用默認值。對於升序序列,默認最大值為序列數據類型的最大值,默認最小值為 1;對於降序序列,默認最大值為 -1,默認最小值為最小值序列的數據類型的值。
- START 子句指定序列的起始值。
- 如果達到限製,CYCLE 允許您重新啟動該值。下一個數字將是升序的最小值和降序的最大值。如果使用 NO CYCLE,當達到限製時,嘗試獲取下一個值將導致錯誤。如果您沒有明確指定 CYCLE 或 NO CYCLE,則 NO CYCLE 是默認值。
- OWNED BY 子句允許您將表列與序列相關聯,這樣當您刪除列或表時,PostgreSQL 將自動刪除關聯的序列。
現在讓我們進入一些例子。
範例1:
在這個例子中,我們將使用 CREATE SEQUENCE 語句創建一個新的升序序列,從 10 開始,增量為 5:
CREATE SEQUENCE mysequence INCREMENT 5 START 10;
要從序列中獲取下一個值,請使用 nextval()
函數:
SELECT nextval('mysequence');
它將導致以下輸出:
現在,如果我們重複 nexval() 函數,我們會得到遞增的值。
輸出:
範例2:
以下語句使用循環選項創建從 3 到 1 的降序序列:
CREATE SEQUENCE three INCREMENT -1 MINVALUE 1 MAXVALUE 3 START 3 CYCLE;
當您多次執行以下語句時,您將看到數字從 3、2、1 開始並返回到 3、2、1 等:
SELECT nextval('three');
輸出:
範例3:
在本例中,我們將使用以下語句創建與表列關聯的序列:
CREATE TABLE order_details( order_id SERIAL, item_id INT NOT NULL, product_id INT, product_name TEXT NOT NULL, price DEC(10, 2) NOT NULL, PRIMARY KEY(order_id, item_id) );
其次,創建一個與關聯的新序列item_id
的列order_details
表:
CREATE SEQUENCE order_item_id START 10 INCREMENT 10 MINVALUE 10 OWNED BY order_details.item_id;
三、插入三個訂單行項目order_details
表:
INSERT INTO order_details(order_id, item_id, product_name, price) VALUES (100, nextval('order_item_id'), 'DVD Player', 100), (100, nextval('order_item_id'), 'Android TV', 550), (100, nextval('order_item_id'), 'Speaker', 250);
四、從order_details表查詢數據:
SELECT order_id, item_id, product_name, price FROM order_details;
輸出:
相關用法
- PostgreSQL CREATE DOMAIN用法及代碼示例
- PostgreSQL CREATE TABLE用法及代碼示例
- PostgreSQL CREATE SCHEMA用法及代碼示例
- PostgreSQL CREATE PROCEDURE用法及代碼示例
- PostgreSQL CREATE TRIGGER用法及代碼示例
- PostgreSQL CREATE INDEX用法及代碼示例
- PostgreSQL CREATE ROLE用法及代碼示例
- PostgreSQL CREATE TABLESPACE用法及代碼示例
注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL – CREATE SEQUENCE。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。