您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我不明白postgresql的nextval()是如何工作的,有人可以解释吗?

我不明白postgresql的nextval()是如何工作的,有人可以解释吗?

NEXTVAL 是从序列中获取一个值的函数

序列是一个对象,它返回不断增加的数字,每次调用都不同,而与事务等无关。

每次致电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.

请注意,即使您回滚了insert语句或从两个不同的会话中运行并发语句,返回的序列值也将永远不会相同,也不会被重用(请参阅文档中的精美印刷品,尽管位于CYCLE)。

因此,您可以确保所有主键的值都将在表中唯一生成

SQLServer 2022/1/1 18:38:36 有614人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶