`

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

分享到:
评论

相关推荐

    支持主键自增的数据库获取主键值.zip

    对于支持主键自增的数据库,如MySQL、SQLite、PostgreSQL等,系统会自动为每个新插入的记录生成一个唯一的主键值,无需手动设置。 在Java开发中,MyBatis作为一个轻量级的持久层框架,广泛应用于数据操作。MyBatis...

    SQLite3中自增主键相关知识总结

    在其他数据库系统中,如MySQL或PostgreSQL,可以使用TRUNCATE TABLE命令快速清空表并重置自增主键。然而,SQLite3不支持TRUNCATE TABLE,而是建议使用DELETE FROM TableName语句来达到相同的效果。在SQLite中,删除...

    04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略

    1. **IDENTITY**:依赖于数据库自增机制,适用于MySQL、SQL Server等支持自动增长的数据库。 2. **SEQUENCE**:使用数据库序列,适用于Oracle、PostgreSQL等支持序列的数据库。 3. **TABLE**:通过特定的表来生成...

    mybatis获取自增主键的值

    自增主键通常在关系型数据库如MySQL、PostgreSQL中使用。它们会在每次插入新记录时自动递增,确保生成唯一的ID。在MySQL中,这可以通过设置`AUTO_INCREMENT`属性来实现。 2. **MyBatis的自动映射机制**: MyBatis...

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

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

    DB2到GreenPlum/PostgreSQL的转换指南

    - **主键**:DB2中的主键定义与GreenPlum/PostgreSQL相似,但需要注意的是,在GreenPlum/PostgreSQL中,主键约束通常会自动创建一个唯一索引。 - **外键**:DB2支持外键约束,但在GreenPlum/PostgreSQL中,外键约束...

    1.5-PostgreSQL对象-关系数据库系统软件.ppt

    4. **序列(Sequence)对象**:生成唯一的整数序列,常用于主键自增字段。 5. **函数(Function)对象**:用户可以定义的可重复使用的代码块,可以接受参数并返回值,增强了SQL的表达能力。 6. **触发器(Trigger)...

    Hibernate主键策略-sequence

    Hibernate还提供了其他主键生成策略,如`increment`(适用于单线程环境),`identity`(数据库自增,如MySQL),`table`(通过独立的主键生成表)等,开发者应根据具体需求选择合适的策略。 6. **跨数据库兼容性**...

    最新的若依框架postgresql版本

    3. SQL语法差异:MySQL和PostgreSQL的SQL语法有一些不同,如日期时间函数、自增主键等。在迁移过程中,可能需要对原有的SQL语句进行调整,以适应PostgreSQL的语法。 4. ORM框架兼容性:若依框架通常使用MyBatis或...

    hibernate的主键生成策略

    它不依赖于数据库的序列或自增功能,因此可以跨数据库使用。然而,由于它是基于Java的同步机制,当多个JVM并发访问时可能会出现主键冲突。所以,它适用于单进程环境,不适合集群环境。 3. **hilo**(高低位方式):...

    PostgreSQL数据库培训学习手册 .pdf

    - 自增字段(SERIAL类型):PostgreSQL提供了一种特殊的数据类型SERIAL,用于自增字段的创建,类似于Oracle中的自增关键字。 2. 约束条件: - 检查约束(CHECK):用于确保列中的值满足特定的条件,比如价格大于...

    PostgreSQL Developer s Guide

    - **注意**: 这会释放所有数据并重置自增ID,但保留表结构。 ##### 3. Inserting, Updating, and Deleting Data from Tables - **插入数据(Inserting Data)** - **基本语法**: `INSERT INTO table_name (column1,...

    Hibernate各种主键生成策略与配置详解

    increment策略由Hibernate在内存中自增生成主键,不依赖于数据库。它通过查询当前表的最大ID值,然后在内存中递增生成新的主键。由于这个过程不是线程安全的,因此在多JVM环境下可能会导致主键冲突。仅适用于单个...

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

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

    Laravel开发-laravel-postgresql-inherit

    在Eloquent ORM中,你可以通过定义`$table`和`$incrementing`属性来指定模型对应的表名和主键是否自增。 例如,如果你有一个`Employee`父表和一个`Manager`子表,`Employee`模型可能会这样定义: ```php namespace...

    PostgreSQL 实用实例参考

    在PostgreSQL中,可以使用`CREATE TABLE`语句定义表结构,包括数据类型(如INT、VARCHAR、DATE等)、主键约束、外键约束等。例如: ```sql CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(50), ...

    Postgresql基础语法汇总.zip_PostgreSQL基础语法汇总

    这里,`id`是自增主键,`name`是非空字符串,`email`是唯一且可为空的字符串,`created_at`是默认为当前时间的日期时间戳。 2. **修改表格**: `ALTER TABLE`用于修改已存在的表格结构。比如添加新列: ```sql ...

    Hibernate用UUID作为主键的Demo

    在使用UUID作为主键时,数据库表对应的主键字段应设置为足够的长度,如MySQL的`CHAR(36)`或PostgreSQL的`VARCHAR(36)`,以容纳32位十六进制字符串加上4个破折号。 ### 6. 测试与运行 在实际项目中,你可以创建一个...

    Hibernate的主键生成方式

    - **应用场景**:适合于高并发环境下,且数据库不支持自增主键的场景。 3. **seqhilo** - **定义**:与hilo类似,但是使用数据库序列(sequence)来实现高位值的管理。主要用于Oracle等支持序列的数据库。 - **...

    PostgreSQL常用数据类型

    它们非常适合用作表中的主键字段。 #### 4. 货币数据类型 - **money**:这是一种特殊的数据类型,用于存储货币值。它的取值范围为-21474836.48到+21474836.47,非常适合金融应用中的货币计算。 #### 5. 字符串数据...

Global site tag (gtag.js) - Google Analytics