PostgreSQL创建自增列

PostgreSQL SERIAL创建自增列

PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。创建表时使用serial伪类型定义序列:

CREATE TABLE table_name(
    id SERIAL  
);

赋值serial伪类型给id列,PostgreSQL将执行下列步骤:

  • 创建序列对象并设置下一个生成值作为列的缺省值。
  • 给对应列增加NOT NULL约束,因为序列总是生成一个整数值,不能为null值。
  • 赋值序列的拥有者给id列,因此当id列或表被删除时,序列对象自动被删除。

相当于执行了下面语句:

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;

PostgresQL SERIAL示例

特别需要注意的是,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)

原文链接

上一篇:DropZone图片上传控件的使用


下一篇:HTML5学习笔记(三):语义化和新增结构元素