![](/img/trans.png)
[英]I don't understand the need for self-joins. Can someone please explain them to me?
[英]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.