微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

原文链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐