linux中数据库创建表要求id自增,postgresql数据库表实现ID自增

postgresql数据库可以创建主键,但是没有像mysql那样直接指定主键自增的auto_increment关键字,因此如果在postgresql中创建表指定主键自增使用auto_increment会报错。那么如何实现主键自增,postgresql通过序列来实现。序列可以实现自动增长,而且表字段可以指定默认值,因此可以通过指定默认值的方式来实现主键自增。

postgresql提供了三种serial类型:smallserial,serial,bigserial,他不是真正的类型,而是在创建唯一标识符列的标志以方便使用。bigserial会创建一个bigint类型的自增,serial用以创建一个int类型的自增,依次类推。

下面通过实例演示自增ID的实现:

f37bed78f3fdf90930a35322f6c50e8e.png

通过建表语句,可以看到,因为使用了serial类型,所以会创建一个关联的sequece,名为aaa_id_seq。

接着查看表结构,并向表中插入数据:

052474c06a2a3b4549cd2b13f054bff3.png

表aaa实现了id自增功能,表的id默认值是nextval('aaa_id_seq'::regclass)。

按照这个思路,我们可以这么来干,一般的主键表,没有使用serial类型,那么我们可以通过创建序列,并修改表ID默认值字段,指定默认值字段为序列的nextval。

我们创建一个普通的int类型ID,并设置为主键。建表不会出现创建序列的notice内容。

2658e63877d3c072dcbf058b5aa583ec.png

这个表的插入,如果不指定id,那么就会出现错误:

2f3f7ed92fd7d3140de1fedfd618c691.png

接着我们创建一个序列:

create sequence bbb_id_seq start with 1 increment by 1 no minvalue no maxvalue cache 1;

7b7efabf5959196f34d4a16dfd69d2d4.png

设置表bbb的ID字段的默认值为nextval(bbb_id_seq)

alter table bbb alter column id set default nextval('bbb_id_seq');

f32718c209e9632ad312c3854ec9df87.png

再次向bbb中插入记录,这次不用关心ID字段了。

7738c301fe7902218371adcaa7617be8.png

通过查看表结构,看看两种方式产生的表:

8ff014e5e0f1e24fd6fd4042e4dfd882.png

postgresql查找索引的方法也是和mysql不一样,postgresql查看索引的语法是:select * from pg_indexes where tablename='bbb';或者select * from pg_statio_all_indexes where relname='bbb';

6aa4c4d31f542495299f805c09db4418.png

可以看到,postgresql默认索引也是通过btree来创建的。

最后再补充一点内容,查看序列和查看表结构是一样的,都是使用\d来查看,比如\d aaa_id_seq。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值