Postgresql 数据库 序列

在Postgresql数据库中,作为主键的id,经常使用serial字段。

例如:

CREATE TABLE tbl_test
(
id serial NOT NULL,

CONSTRAINT pk_t14 PRIMARY KEY (id)

)

那么 默认数据库会为tbl_test表中的字段 id 生成一个序列:

CREATE SEQUENCE tbl_test_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;

如何获取sequence的洗一个或者当前值:

select nextval('tbl_test_id_seq');
select currval('tbl_test_id_seq');

注意事项:

nextval 函数:递增序列对象前进到它的下一个数值并且返回该值。当你插入record时,这个动作会自动完成。多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。

currval 函数:  返回当前会话中最近一次nextval抓到的该序列的数值。当前会话的意思是说,在本会话中在该序列上调用过 nextval,如果没有调用过,那么sql会产生一个错误。 如果出错了,说明没有执行过nextval,因此可以用于判断其它会话是否执行过nextval。

===================================

参考资料:

http://dba.stackexchange.com/questions/3281/how-do-i-use-currval-in-postgresql-to-get-the-last-inserted-id

http://www.cnblogs.com/stephen-liu74/archive/2012/05/07/2295273.html

http://space.itpub.net/?uid-519536-action-viewspace-itemid-617172

原文地址:https://www.cnblogs.com/amosleaf/p/2537082.html