繁体   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