Postgresql 创建主键并设置自动递增的三种方法
发布时间:2020-12-13 17:30:30 所属栏目:百科 来源:网络整理
导读: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 "tes
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 类型来实现的, --比较三个表的表结构 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 掉,而方法三不会。 转贴:http://francs3.blog.163.com/blog/static/40576727201111715035318/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |