`
Rainbow702
  • 浏览: 1076738 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

Postgresql中新建表的时候,如何使用主键使用序列(sequence)的值进行自增长

阅读更多

 我们知道,一般的数据库中都有序列,可以使用它对主键进行自增长,hbm框架都是如此(比如,Hibernate)。那么,在不使用hbm框架的情况下,如何使主键进行自增长呢。其实,很简单,只需要在建表的时候给主键加一个默认值即可,下面以postgresql数据库为例,给出一个简单的说明(其他数据库的语法也许跟这个不一样):

id integer NOT NULL DEFAULT nextval('personid_seq'::regclass)

  

 上面的"nextval('personid_seq'::regclass"部分就是关键,其中,personid_seq 就是一个序列,可以通过下面的语句进行声明:

CREATE SEQUENCE personid_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 5;

 

这样一来,在往数据库插入记录的时候,就不必给id字段进行手动赋值了。

 

PS:需要注意的事,你在insert into的时候,需要指明字段,不然会报错的。比如,test表中共有id与name两个字段,其中,id使用如上方式进行了自增长,那么你在插入记录的时候,需要像下面这么来写SQL语句

insert into test(name) values('tiger');

 而不能写成下面这种的:

insert into test values('tiger');

 

分享到:
评论

相关推荐

    持久化类主键生成策略+例子

    主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种主键生成策略以及Hibernate的13种主键生成策略,并通过实例来帮助理解。 ### JPA主键生成策略 1. **`...

    hibernate中自动生成主键的办法

    在Hibernate中,可以使用`<generator class="sequence">`来指定使用Sequence作为主键生成策略,并通过`<param name="sequence">SEQ_CHILD</param>`来指定具体的序列名称。这种方式适用于需要生成大量连续主键值的...

    hibernate的主键生成策略

    seqhilo策略类似于hilo,也是基于hi/lo算法,但它使用数据库序列而不是单独的表来获取高位值。这使得它更适合数据库支持序列的环境,如Oracle,但在跨数据库使用时可能需要额外的配置。 5. **identity**: ...

    Hibernate主键生成方式

    - **应用场景**:在支持 Sequence 的数据库环境中使用,如 Oracle 数据库,可以充分利用数据库本身的特性来提高主键生成的效率。 ##### 4. increment - **定义**:主键按数值顺序递增。实现机制为在当前应用实例中...

    hibernate主键生成策略

    【hibernate主键生成策略】是Hibernate框架中用于生成持久化对象主键的重要机制,它决定了如何在数据库中创建唯一的标识符。在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的...

    sql获得自动增加字段的下一个编号,不是max(id)+1

    传统上,为了获取下一个自增长ID,开发人员可能会选择查询表中的最大ID值,然后在此基础上加1。例如: ```sql SELECT MAX(id) + 1 AS NextID FROM TableXXX; ``` 这种方法简单直观,但在多用户环境中容易出现问题...

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

    2. **SEQUENCE**:使用数据库序列,适用于Oracle、PostgreSQL等支持序列的数据库。 3. **TABLE**:通过特定的表来生成主键,适用于不支持序列的数据库。 4. **AUTO**:由JPA供应商决定,通常是IDENTITY或SEQUENCE。 ...

    Hibernate主键类型说明和配置手册.doc

    5. **sequence**: 使用数据库的序列生成主键,适用于DB2、PostgreSQL、Oracle、SAP DB、McKoi和Interbase。 6. **hilo**: 使用Hi-Lo算法,需要一个数据库表来存储生成的主键。不适用于JTA环境或自定义数据库连接。 ...

    openjpa实体标识的生成策略

    如果数据库支持序列(如Oracle和PostgreSQL),可以使用`strategy=GenerationType.SEQUENCE`。这时,需要配合`@SequenceGenerator`注解来指定序列名称。`@SequenceGenerator`注解的属性包括: - `name`:必需的属性...

    hibernate各种主健详解

    - 需要在映射文件中使用`<id name="id" column="ID" type="java.lang.Long" generator="increment"/>`标记。 - 仅适用于单个Hibernate实例或集群环境中所有节点共用一个Session Factory的场景。 - 不支持数据库的...

    mysql实现sequence功能的代码

    在数据库管理中,序列(Sequence)通常用于生成唯一的标识符,比如主键,尤其是在支持自动增长的数据库系统中。MySQL自身并不直接支持Sequence功能,但可以通过自定义的方式模拟这一功能。这里我们将详细介绍如何在...

    hibernate中的generator的生成方式hibernate中的generator的生成方式

    在Hibernate框架中,对象与关系映射(ORM)是其核心功能之一,它能够将面向对象模型中的类与数据库表建立对应关系,从而实现对象和数据库之间的转换。而在持久化对象的过程中,为实体类中的主键自动生成唯一标识符是...

    SQL语句大全

    在支持序列的SQL方言(如Oracle、PostgreSQL或SQL Server 2012+)中,`CREATE SEQUENCE`用于创建自增序列,通常用作自动编号字段的来源。 7. **修改表结构**: - `ALTER TABLE`语句允许增加、删除或修改表的列。 ...

    hbm.xml说明

    6. **discriminator-value**: 指定区分不同子类的值,在多态映射中使用。 7. **where**: 指定查询时的额外条件。 例如: ```xml <where>student_status = '0' ``` #### 三、id标签 `id` 标签用于定义 Java 类...

    mybatis-plus-3.0.zip

    4. **主键策略**:MyBatis-Plus 支持多种主键生成策略,包括 Identity(自动增长)、Sequence(序列)、雪花算法等,可以根据不同的数据库类型选择合适的策略。 5. **批量操作**:支持批量插入、更新和删除,可以一...

    Hibernate配置手册.txt

    - **sequence**:基于数据库序列生成主键,适用于支持序列的数据库如Oracle。 - **identity**:利用数据库的自动增长字段生成主键,适用于支持自动增长的数据库如MySQL。 - **uuid.hex**:生成128位的UUID,转换为16...

    hibernate全面精品总结

    2. **Sequence**:使用数据库序列来生成 ID,适用于 Oracle 和 PostgreSQL。 3. **Table**:通过一个独立的表来生成 ID,适合所有数据库。 4. **HiLo**:高效 ID 生成器,适用于大型系统,避免过多的数据库交互。 5....

Global site tag (gtag.js) - Google Analytics