当前位置: 首页 > 面试题库 >

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

汤玉宸
2023-03-14
问题内容

在担任前端开发人员的头几个月后,我才开始涉足后端开发。我正在使用postgreSQL,似乎无法将我的头放在nextval()函数周围。我读了这篇,但对我来说还不清楚。
http://www.postgresql.org/docs/current/interactive/functions-
sequence.html
nexval()有什么好处/用例?


问题答案:

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)。

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



 类似资料:
  • 我得到了这个任务,到目前为止,我一直在使用sha1进行安全保护。老师上周五给我们回电话,告诉我们用password_hash。知道这是明天的事,我试图弄清楚这是如何工作的,但不要把我的头包在里面。我发现很多人谈论它但没有这些工作为我如何使用password_hash注册和登录 目前,正如分配给我的那样,我只使用PDO并返回到我以前的工作代码(使用sha1) 我知道它应该是一个布尔值,但我不知道如何

  • 问题内容: 有两种通过play框架创建海关标签的方法。 通过在app / view / tags中定义一个Groovy模板 通过在类中直接扩展FastTag直接在纯Java中 没有最新的文件。 问题答案: 因此,类似于JavaExtensions通过扩展JavaExtensions类的工作方式,要创建FastTag,您需要创建一个扩展FastTags的类。您要作为标记执行的每个方法都必须符合以下方

  • 问题内容: 情况1:这不会引起?。谁能告诉我为什么这不会导致ConcurrentModificationException。 情况2:这是由于我尝试访问AsyncThread中的线程不安全的人员列表。我可以使我的“人员列表”实现是线程安全的,并且应该可以运行。 谁能解释我到底发生了什么。我无法理解这是如何解决问题的。 案例2是否将实现从更改为推荐? 添加例外: 05-28 20:34:21.073

  • 问题内容: 我不太了解Java中“ this”的用法。如果有人可以帮助我澄清一下,我将不胜感激。 在此网站上显示:http : //docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html “在实例方法或构造函数中,这是对当前对象的引用,该对象是正在调用其方法或构造函数的对象。使用此方法,您可以从实例方法或构造函数中引用当前对象的任何成员。

  • 从Web API 2的模板中,post方法总是这样的: 我不理解这个< code>CreatedAtRoute()方法。有人能给我解释一下吗?

  • 问题内容: 我已经花了最后两天的时间来理解系统调用,但是我仍然在这里。让我直接谈谈这个问题。 在execlp的声明系统调用为与描述: 该为const char ARG和随后的椭圆在execl的(),execlp()和execle()函数可以作为为arg0,ARG1,…,ARGN被认为。 但是,我在课本中看到这样的系统调用:(“ …”是我们作为学生来识别的)。但是,此系统调用甚至与系统调用上的声明都