當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


PostgreSQL CREATE SEQUENCE用法及代碼示例

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;

輸出:

相關用法


注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL – CREATE SEQUENCE。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。