第一季

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在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

posted on 2012-06-05 17:58  第一季  阅读(721)  评论(0编辑  收藏  举报