
概述Postgresql 有以下
三种方法设置主键
递增的方式,下面来看下相同点和不同点。 --方法一 create table test_a ( id serial, name character varying(128), constraint pk_test_a_id primary key( id) ); NOTICE: CREATE TABLE will create implicit Postgresql 有以下三种方法设置主键递增的方式,下面来看下相同点和不同点。 --方法一 create table test_a ( ID serial,name character varying(128),constraint pk_test_a_ID primary key( ID) ); NOTICE: CREATE table will create implicit sequence "test_a_ID_seq" for serial column "test_a.ID" NOTICE: CREATE table / PRIMARY KEY will create implicit index "pk_test_a_ID" for table "test_a" CREATE table --方法二 create table test_b ( ID serial PRIMARY KEY,name character varying(128) ); NOTICE: CREATE table will create implicit sequence "test_b_ID_seq" for serial column "test_b.ID" NOTICE: CREATE table / PRIMARY KEY will create implicit index "test_b_pkey" for table "test_b" CREATE table --方法三 create table test_c ( ID integer PRIMARY KEY,name character varying(128) ); NOTICE: CREATE table / PRIMARY KEY will create implicit index "test_c_pkey" for table "test_c" CREATE table //方法三上面的一小段是工具生成的,如果表已经建好,只要用下面的语句即可生成自动增长序列 CREATE SEQUENCE test_c_ID_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; alter table test_c alter column ID set default nextval('test_c_ID_seq'); 很明显从上面可以看出,方法一和方法二只是写法不同,实质上主键都通过使用 serial 类型来实现的, 使用serial类型,PG会自动
创建一个序列给主键用,当插入表数据时如果不指定ID,则ID会默认使用序列的 NEXT值。 方法三是先创建一张表,再创建一个序列,然后将表主键ID的默认值设置成这个序列的NEXT值。这种写法 似乎更符合人们的思维习惯,也便于管理,如果系统遇到sequence 性能问题时,便于调整 sequence 属性; --比较三个表的表结构 skytf=> \d test_a table "skytf.test_a" Column | Type | ModifIErs --------+------------------------+----------------------------------------------------- ID | integer | not null default nextval('test_a_ID_seq'::regclass) name | character varying(128) | Indexes: "pk_test_a_ID" PRIMARY KEY,btree (ID) skytf=> \d test_b table "skytf.test_b" Column | Type | ModifIErs --------+------------------------+----------------------------------------------------- ID | integer | not null default nextval('test_b_ID_seq'::regclass) name | character varying(128) | Indexes: "test_b_pkey" PRIMARY KEY,btree (ID) skytf=> \d test_c table "skytf.test_c" Column | Type | ModifIErs --------+------------------------+----------------------------------------------------- ID | integer | not null default nextval('test_c_ID_seq'::regclass) name | character varying(128) | Indexes: "test_c_pkey" PRIMARY KEY,btree (ID) 从上面可以看出,三个表表结构一模一样, 三种方法如果要寻找差别,可能仅有以下一点, 当 drop 表时,方法一和方法二会自动地将序列也 drop 掉,而方法三不会。 总结
以上是内存溢出为你收集整理的Postgresql 创建主键并设置自动递增的三种方法全部内容,希望文章能够帮你解决Postgresql 创建主键并设置自动递增的三种方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)