在我担任前端开发工作的前几个月之后,我才开始涉足后端开发.我正在使用postgreSQL,似乎无法绕过nextval()函数.我看了这个,但我不清楚. http://www.postgresql.org/docs/current/interactive/functions-sequence.html nexval()有哪些好处/用例?
Qua*_*noi 31
NEXTVAL 是一个从序列中获取下一个值的函数.
序列是一个对象,它返回不断增加的数字,每个呼叫都不同,无论事务等.
每次拨打电话NEXTVAL,都会得到不同的号码.
这主要用于为您的表生成代理主键.
您可以创建这样的表:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
Run Code Online (Sandbox Code Playgroud)
并插入如下值:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
Run Code Online (Sandbox Code Playgroud)
看看你得到了什么:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
Run Code Online (Sandbox Code Playgroud)
PostgreSQL为此提供了一个很好的语法糖:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
Run Code Online (Sandbox Code Playgroud)
这相当于
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
Run Code Online (Sandbox Code Playgroud)
并可以像这样使用:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Run Code Online (Sandbox Code Playgroud)
请注意,即使您回滚插入语句或从两个不同的会话运行并发语句,返回的序列值也将永远不会相同,并且永远不会被重用(尽管在文档中读取精细打印CYCLE).
因此,您可以确保主键中的所有值都将在表中生成唯一值.
| 归档时间: |
|
| 查看次数: |
34078 次 |
| 最近记录: |