psql 关于主键自增的问题

在psql中往往我们需要设置一个自增的主键id字段,psql中不像SQL Server那样点选 打钩傻瓜式就能设置好的,是需要创建序列的:CREATE SEQUENCE,关键字SEQUENCE。

我们先看看创建过后的结果:

(用的Navicat工具)

我们可以看到设置自增后字段默认:nextval('bid_id_seq'::regclass) ,bid为我的表名。

故可以译为:下一个值为此表下此字段的注册自增序列。


 

如何创建id自增字段?

答:建表时使用“serial”关键字,“PRIMARY KEY”关键字为设置主键。故设置主键自增id方式如下: 

  
1 create table test_b 
2 ( 
3   id serial PRIMARY KEY, //主键并自增
4   name character varying(64) 
5 );
View Code

 

 如果表已经建好,并且表里已经有了数据,缺id自增字段?

  答:先手工增加id字段,再去创建SEQUENCE序列,建立test_b_id_seq,最后设置字段开始自增的id。

  如表已经建好,用下面的语句即可生成自动增长序列:   

  
 1 --先创建SEQUENCE
 2 CREATE SEQUENCE test_b_id_seq 
 3     START WITH 1    //从1开始
 4     INCREMENT BY 1  //自增空间为1
 5     NO MINVALUE 
 6     NO MAXVALUE 
 7     CACHE 1; 
 8         
 9 --建立自增test_b_id_seq
10 alter table test_b alter column id set default nextval('test_b_id_seq'); 
11 
12 --设置字段开始自增的id
13 SELECT setval('test_b_id_seq', (SELECT MAX(id) FROM test_b)+1)
View Code

 

 以上是在Navicat工具里操作的,当然还可以用大象客户端pgAdmin。建议:不管用不用id字段,建表时可以加上自增id主键,避免后期麻烦。(傻屌网友陈二狗遇到过坑的)


 

最后本街帅附送一个语句,清空表数据 让自增id从1开始:  

  
1 TRUNCATE  TABLE  test_b;//清空表数据
2 ALTER SEQUENCE test_b_id_seq RESTART WITH 1;//重置自增id从1开始
View Code

 

以上为本帅工作中用psql遇到过的操作,欢迎评论转载,转载请务必留下原文地址 便于学习分享~~~

posted @ 2019-03-07 16:55  复城大师兄  阅读(2371)  评论(1编辑  收藏  举报