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