`

Postgresql主键自增

 
阅读更多


在postgres中,

主键约束只是唯一约束和非空约束的组合。所以,下面两个表定义是等价的:

CREATE TABLE products (
    product_no integer UNIQUE NOT NULL,
    name text,
    price numeric
);
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);

 

主键也可以约束多于一个字段;其语法类似于唯一约束:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

 

主键表示一个或多个字段的组合可以用于唯一标识表中的数据行。这是定义一个主键的直接结果。请注意:一个唯一约束( unique constraint )实际上并不能提供一个唯一标识,因为它不排除 NULL 。

一个表最多可以有一个主键(但是它可以有多个唯一和非空约束)。关系型数据库理论告诉我们,每个表都必须有一个主键。PostgreSQL 并不强制这个规则,但我们最好还是遵循它。

 

值得注意的是,SQLite中,主键是自动 增长的

在MySQLI中,需要加一个auto_increment 标志

在Postgres中,有一个专门的类型 叫做serial的,来表示自动增加

 

 

为每一行生成一个”序列号(serial number)“。在 PostgreSQL 里,通常是用类似下面这样的方法生成的:

CREATE TABLE products (
    product_no integer DEFAULT nextval('products_product_no_seq'),
    ...
);

这里的 nextval() 从一个序列对象(sequence object)提供后继的数值。这种做法非常普遍,以至于我们有一个专门的缩写用于此目的:

CREATE TABLE products (
    product_no SERIAL,
    ...
);

其实, 自动增加 字段是 default字段 的一种特殊情况

可以在创建表之后,再次创建sequence

CREATE SEQUENCE event_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

alter table event alter column id set default nextval('event_id_seq');

或者修改字段类型
ALTER TABLE event ALTER COLUMN id TYPE serial;

添加主键
ALTER TABLE charge ADD PRIMARY KEY (id);

http://www.postgresql.org/docs/8.2/static/sql-altertable.html

分享到:
评论

相关推荐

    postgresql导入数据库表并重设自增属性

    注:一般序列名称由数据表名+主键字段+seq组成 (通常情况下主键字段即为自增字段),如下表名为cof_table_hot_analysis,主键字段为 id CREATE SEQUENCE cof_table_hot_analysis_id_seq START WITH 1 INCREMENT...

    深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

    前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?...

    【总结】数据库自增字段的 3 种实现方式

    除了作为主键使用之外,自增字段也可以用于记录各个操作发生的先后顺序,因为它具有递增特性。当我们插入一行数据时,数据库会为自增字段生成一个新的数值。 我们今天的主题就是自增字段的实现,下表列出了主流...

    DBCHM v1.6

    DBCHM-最简单、最实用的数据库表列批注维护工具 DBCHM支持SqlServer/MySql/Oracle/...基于数据库中的表列结构(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述),导出数据库CHM文档。

    Increment_Backup_To_Hive:一个增量备份关系数据库(MySQL, PostgreSQL, SQL Server, SQLite, Oracle等)到hive的php脚本工具

    增量备份时,脚本主要根据表的自增主键来查询新增数据,然后把新增的数据按照hive表的格式导出成文本,最后调用hive命令直接把文本导入hive内部。支持压缩表+多分区+字段增减。环境脚本内部会调用hive命令,所以必须...

    JDiy框架与javaWeb建站平台 v2.6.1.zip

    修复MSSQL数据库环境下,自增主键表在save后,无法立即获取新增记录的id的bug. 优化JDiyRequest的InputStream(允许使用第三方上传组件). 修复数据库连接池中连接失效后,控制台会报错(但不影响使用)的bug;修复...

    UniDAC 4.1.4 for D6-XE2

    UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。ADO...

    unidac350d14pro

    UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、 PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。...

    DevArt UniDAC v.3.70.0.19 [D7-XE]

    UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。ADO...

    UniDAC 2.70 源码版本 (For Delphi2010)

    UniDAC支持Oracle、MSSQL、MYSQL、IB/FB、PostgreSQL。 2、对三层特性支持非常好!也许你也会问,三层也是访问DB,ADO也支持啊?!但三层最好方式是无状态方式,在高并发的处理中,一般不允许本地有数据集缓存。ADO...

Global site tag (gtag.js) - Google Analytics