Postgresql 创建主键并设置自动递增的三种方法
来源:互联网 发布:java httpclient 爬虫 编辑:程序博客网 时间:2024/05/29 19:51
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 TABLECREATE 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 掉, 而方法三不会。
转贴:http://francs3.blog.163.com/blog/static/40576727201111715035318/
0 0
- Postgresql 创建主键并设置自动递增的三种方法
- Postgresql 创建主键并设置自动递增的三种方法
- Postgresql 创建主键并设置自动递增的三种方法
- Postgresql 创建主键并设置自动递增的三种方法
- oracle 怎样设置自动递增的的字段,也就是设置自动递增的ID 主键
- postgreSQL怎样创建一个序列号/自动递增的字段
- Oracle||PL/SQL 设置主键自动递增
- PL/SQL如何设置主键自动递增
- 三种获得自动生成主键的方法
- mybatis+postgresql返回递增主键的正确姿势及勘误
- 设置mysql递增主键的起始值
- ORACLE设置递增主键
- 设置(创建)主键和外键的三种方式 和 删除含有主键外键的表顺序
- SqlServer代码设置主键并自动生长
- PowerDesigner设置MYSQL主键自动增长的方法
- PowerDesigner设置MYSQL主键自动增长的方法
- PowerDesigner设置MYSQL主键自动增长的方法
- oracle主键自动递增设计
- 分享与自我表现
- MariaDB 特性介绍-动态虚拟列
- 如何高效地做到大文本去除重复行
- container_of
- Android TV 屏幕适配相关
- Postgresql 创建主键并设置自动递增的三种方法
- 竟然用了40分钟。。Binary Tree Maximum Path Sum
- android-ndk ffmpeg移植
- HandlerSocket client for java——MySql as NoSQL
- 堆和栈的区别(c/c++)
- android的m、mm、mmm编译命令的使用
- Linux tcpdump命令详解
- Android类动态加载技术
- 中英文分词及词性标注工具