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

标签 sql postgresql

在我作为前端开发人员工作的头几个月后,我才刚刚开始涉足后端开发。我正在使用 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.

请注意,即使您回滚插入语句或从两个不同的 session 运行并发语句,返回的序列值也永远不会相同并且永远不会被重用(阅读文档中的细则,尽管在 CYCLE 下)。

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

关于sql - 我不明白 postgresql 的 nextval() 是如何工作的,有人可以解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782006/

相关文章:

SQL 分组限制

postgresql - 错误函数解码(bytea未知)不存在

postgresql - PostGIS:从其他点查找一定半径内的点

php - PDO SQL 查询不受限制

java - 使用 JdbcBatchItemWriter 更新重复键

SQL 计数不同

php - 在查询中使用多个条件时出错

sql - Apache Hive 查询 HiveQL

sql - BigQuery 是否支持 "execute immediate"命令运行动态查询?

node.js - 跨关系的可选查询