PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。创建表时使用serial伪类型定义序列:
CREATE TABLE table_name( id SERIAL );
赋值serial伪类型给id列,PostgreSQL将执行下列步骤:
相当于执行了下面语句:
CREATE SEQUENCE table_name_id_seq; CREATE TABLE table_name ( id integer NOT NULL DEFAULT nextval('table_name_id_seq') ); ALTER SEQUENCE table_name_id_seq OWNED BY table_name.id;
特别需要注意的是,serial列不会隐式在列上创建索引或是该列为主键列。当然可以很容易使用PRIMARY KEY关键字增加相应约束。
CREATE TABLE fruits( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL );
在insert语句中,可以忽略对应列或使用default关键字都可以给serial赋值
INSERT INTO fruits(name) VALUES('orange');
或者:
INSERT INTO fruits(id,name) VALUES(DEFAULT,'apple');
使用pg_get_serial_sequence函数可以获得serial列的序列名称:
pg_get_serial_sequence('table_name','column_name')
通过给currval函数传入序列名称可以获得当前生成的值
SELECT currval(pg_get_serial_sequence('fruits', 'id'));
当执行insert语句时,你想获得序列生成的值,可以在insert语句中使用RETURNING id子句实现。下面语句插入一行新的记录,并返回id列生成的值:
INSERT INTO fruits(name) VALUES('banana') RETURNING id;
结果如下:
id ---- 3 (1 row)
原文链接