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 掉, 而方法三不会。
原文:
http://francs3.blog.163.com/blog/static/40576727201111715035318/
分享到:
相关推荐
关于postgreSQL复合主键的一些用法,希望对大家有用。
PostgreSql+PostGis 创建空间数据库
实现轻松创建PostgreSQL的分区表DDL
①添加【postgres】用户,数据库安装在postgres用户目录【/home/postgres/disk_d/applications/service/postgresql】路径下, ②给新用户授权 ③解压数据库文件 ④安装数据库依赖包 ⑤编译数据库 ⑥安装数据库 ⑦...
ruoyi框架集成postgresql,对自增表设置序列
内容概要:适用于PostgreSQL的创建数据库代码,包括创建、注释、主键限制、添加数据等功能。 适用人群:SQL入门新手、PostgreSQL新手
非常厉害的开源数据库,PostgreSQL 9.6 中文版最新文档,三种格式:pdf+chm+tar.gz
创建表分区步骤如下: 1. 创建主表 CREATE TABLE users ( uid int not null primary key, name varchar(20)); 2. 创建分区表(必须继承上面的主表) CREATE TABLE users_0 ( check (uid >= 0 and uid< 100>= 100)) ...
PostgreSQL 10 基础课程第二章 数据库管理创建主键
postgresql的类似sqlserver的isdate方法
postgresql-42.5.0.jar是Java上的一个驱动程序,用于连接PostgreSQL数据库并与其进行交互。它可以让Java程序员方便地使用PostgreSQL数据库,并提供了许多功能和工具,使程序员可以编写高效、稳定和高性能的应用程序...
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现...
postgresql
有了Navicat 极完备的图形用户介面(GUI),Navicat for PostgreSQL 让你可以简便地以安全且简单的方法创建、组织、访问和共享资讯及进行 PostgreSQL 的管理。引领 PostgreSQL 的系统管理进入下一个阶段。
PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (函数和操作符 函数和操作符 函数和操作符 <三>) 35 九、序列操作函数: 九、序列操作函数: 九、序列操作函数: 九、序列操作函数: . 35 十二、系统...
postgresql 实现c language外部函数调用,为了提高数据库信息安全及数据库性能,通过c language实现相关功能,并编译成动态链接库so方式,供数据库postgresql调用,在数据库端只见函数的实现接口,隐藏实现细节
PostgreSQL创建空间数据库并导入Shapefile矢量数据-附件资源
greenplum数据库4.3版本创建dblink使用contrib包postgresql-8.3.23.tar.gz
postgresql PGCA 课程PPT01_postgresql_PGCA_PGCP_PGCM_课程全免费 postgresql PGCA 课程PPT01_postgresql_PGCA_PGCP_PGCM_课程全免费 postgresql PGCA 课程PPT01_postgresql_PGCA_PGCP_PGCM_课程全免费 postgresql ...