NEXTVAL是从序列中获取下一个值的函数。
序列是一个对象,它返回不断增加的数字,每次调用都不同,而与事务等无关。
每次致电
NEXTVAL,您都会得到一个不同的号码。
这主要用于为您的表生成代理主键。
您可以创建一个表,如下所示:
CREATE SEQUENCE mysequence;CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
并插入如下值:
INSERTINTO 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可以这样使用:
INSERTINTO mytable (value)VALUES (1), (2); -- you can omit id, it will get filled for you.
请注意,即使您回滚了insert语句或从两个不同的会话中运行并发语句,返回的序列值也将永远不会相同,也不会被重用(请参阅文档中的精美印刷品,尽管位于
CYCLE)。
因此,您可以确保所有主键的值都将在表中唯一生成。



