![](/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.