簡體   English   中英

我不明白 postgresql 的 nextval() 是如何工作的,有人可以解釋一下嗎?

[英]I don't understand how postgresql's nextval() work, can someone explain?

在我擔任前端開發人員的頭幾個月后,我才剛剛開始涉足后端開發。 我正在使用 postgreSQL,但似乎無法理解 nextval() 函數。 我讀過這個,但我不清楚。 http://www.postgresql.org/docs/current/interactive/functions-sequence.html nexval() 的好處/用例是什么?

NEXTVAL是從序列中獲取下一個值的函數。

Sequence 是一個對象,它返回不斷增加的數字,每次調用都不同,無論交易等如何。

每次調用NEXTVAL ,都會得到一個不同的數字。

這主要用於為您的表生成代理主鍵。

您可以像這樣創建一個表:

CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);

並插入這樣的值:

INSERT
INTO    mytable (id, value)
VALUES
        (NEXTVAL('mysequence'), 1),
        (NEXTVAL('mysequence'), 2);

看看你得到了什么:

SELECT * FROM mytable;
 id | value
----+-------
  1 |     1
  2 |     2

PostgreSQL 為此提供了一個很好的語法糖:

CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);

這相當於

CREATE SEQUENCE mytable_id_seq; -- table_column_'seq'
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY DEFAULT NEXTVAL('mytable_id_seq'), value INT); -- it's not null and has a default value automatically

並且可以這樣使用:

INSERT
INTO    mytable (value)
VALUES  (1),
        (2);  -- you can omit id, it will get filled for you.

請注意,即使您回滾插入語句或從兩個不同的會話運行並發語句,返回的序列值也永遠不會相同並且永遠不會被重用(盡管在CYCLE下閱讀文檔中的CYCLE )。

因此,您可以確保主鍵的所有值都將在表中生成唯一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM