小技巧,PostgreSQL创建表字段自增的方法1
-
在 PostgreSQL 中,可以通过将列数据类型定义为 SERIAL 来创建数据库表,用于定义表的某一列为自增列。
创建自增序列
CREATE TABLE <table_name> ( <column_name> SERIAL );
创建表
比如:我们可以在MemFire Cloud中创建一张数据库表
CREATE TABLE user123( id SERIAL PRIMARY KEY, name varchar )
插入数据
要在向表中插入一行时将序列生成的值分配给user123 表的 id 列,您可以忽略该列或对该列使用 DEFAULT 关键字,如下所示
insert into user123(name) values('张三'); insert into user123(name) values('李三'); insert into user123(name) values('王三'); insert into user123(name) values('刘三'); insert into user123(id,name) values(default,'马三');
获取序列的当前值
使用如下sql可以获取序列当前值:
SELECT nextval('user123_id_seq');
小知识
当您将 SERIAL 数据类型分配给任何列时,PostgreSQL 将执行以下操作
- 创建一个序列对象并将序列生成的下一个值作为默认值分配给列,序列的默认名称是
<table_name>_<column_name>_seq
. - 对表的SERIAL 类型列添加NOT NULL 约束,每当数据插入表中时,序列将始终生成一个整数值并将其分配给列,因此列将始终为 NOT NULL。
- 该列将成为序列的所有者。如果列被删除或表被删除,序列将被自动删除。
名称 大小 范围 LLSERIAL 2 字节 1 到 32,767 SERIAL 4 字节 1 到 2,147,483,647 BIGSERIAL 8 字节 1 到 9,223,372,036,854,775,807 相关的方法如下(regclass 表示序列的名称):
函 数 返 回 类 型 描 述 currval( regclass ) bigint 获取指定序列最近一次使用netxval后的数值,如果没有使用nextval而直接使用currval会出错。 lastval() bigint 返回最近一次用 nextval 获取的任意序列的数值 nextval( regclass ) bigint 递增序列并返回新值 setval( regclass,bigint ) bigint 设置序列的当前数值 setval( regclass,bigint ,boolean ) bigint 设置序列的当前数值以及 is_called 标志,如果为true则立即生效,如果为false,则调用一次nextval后才会生效 MemFire Cloud 平台表编辑器操作说明
用户如何在创建了数据表之后,可以调整主键ID为自增,操作如下:
数据类型选择为int4
, 默认值为:nextval('posts4_id_seq'::regclass)
- 创建一个序列对象并将序列生成的下一个值作为默认值分配给列,序列的默认名称是