`
卒子99
  • 浏览: 75257 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[转]Oracle、DB2、PostgreSQL之Sequence总结

    博客分类:
  • DB
阅读更多
Sequence是数据库系统按照一定规则自动增加的数字序列。这个序列一般作为代理主键(因为不会重复),没有其他任何意义。

Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如Oracle、DB2、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库没有Sequence。

根据我个人理解,Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用,非常不错,呵呵,不过很郁闷的各个数据库厂商尿不到一个壶里--各有各的一套对Sequence的定义和操作。在此我对常见三种数据库的Sequence的定义和操作做一个对比和总结,以便日后查看。

一、定义Sequence

定义一个seq_test,最小值为10000,最大值为99999999999999999,从20000开始,增量的步长为1,缓存为20的循环排序Sequence。

Oracle的定义方法:
create sequence seq_test
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;

DB2的写法:
create sequence seq_test
as bigint
start with 20000
increment by 1
minvalue 10000
maxvalue 99999999999999999
cycle
cache 20
order;

PostgreSQL的写法:
create sequence seq_test
increment by 1
minvalue 10000
maxvalue 99999999999999999
start 20000
cache 20
cycle;

二、Oracle、DB2、PostgreSQL数据库Sequence值的引用参数为:currval、nextval,分别表示当前值和下一个值。下面分别从三个数据库的Sequence中获取nextval的值。

Oracle中:seq_test.nextval
例如:select seq_test.nextval from dual;

DB2中:nextval for SEQ_TOPICMS
例如:values nextval for seq_test;

PostgreSQL中:nextval(seq_test)
例如:select nextval(seq_test);

三、Sequence与indentity的区别与联系

Sequence与indentity的基本作用都差不多。都可以生成自增数字序列。
Sequence是数据库系统中的一个对象,可以在整个数据库中使用,和表没有任何关系;indentity仅仅是指定在表中某一列上,作用范围就是这个表。

转自:红联Linux
分享到:
评论

相关推荐

    Oracle、DB2、PostgreSQL之Sequence总结

    在Oracle、DB2和PostgreSQL这三种数据库管理系统中,Sequence都是内置的特性,允许用户创建并管理这样的自动递增序列。然而,值得注意的是,并非所有数据库系统都支持Sequence,比如MySQL、SQL Server和Sybase就没有...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    Hibernate主键生成方式

    - **应用场景**:适用于支持 Sequence 的数据库环境,如 Oracle 或 PostgreSQL。Sequence 能够有效地生成连续的整数序列作为主键。 ##### 7. native - **定义**:由 Hibernate 根据底层数据库自行判断采用 ...

    openjpa实体标识的生成策略

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

    常用数据库的自增字段创建方法汇总

    本文将详细介绍几种主流数据库系统中的自增字段创建方法,包括 DB2、Oracle、MySQL、PostgreSQL、SQL Server 和 Sybase。 #### DB2 DB2 支持通过 `GENERATED ALWAYS AS IDENTITY` 属性来创建自增字段。这种方式...

    Mycat常见问题和解决方案.docx

    Mycat是一种高性能、可伸缩、稳定的分布式关系数据库代理系统,支持多种数据库管理系统,包括MySQL、MongoDB、Oracle、SQL Server、Hive、DB2、PostgreSQL等。下面是Mycat的常见问题和解决方案: Mycat的功能和特性...

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

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

    hibernate主键生成策略

    - **支持数据库**:适用于`DB2`、`PostgreSQL`、`Oracle`、`SAPDB`和`McKoi`等支持序列的数据库。对于`Interbase`数据库,则使用`generator`来实现类似功能。 - **应用场景**:适用于数据量大且对性能要求较高的情况...

    hibernate各种主健详解

    - 适用于支持序列特性的数据库,如Oracle、DB2、PostgreSQL、SAP DB等。 - 由于依赖数据库特性,不同数据库之间的移植性较差。 - 在Oracle等支持序列的数据库中表现良好。 **应用场景:** - 支持序列特性的数据库...

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

    - **适用数据库**:Oracle、PostgreSQL等支持序列的数据库。 - **配置示例**: ```xml <generator class="sequence"> <param name="sequence">person_seq ``` #### 5. Native - **定义**:根据当前使用...

    03_Hibernate&JPA .pptx

    - `GenerationType.SEQUENCE`使用序列(Oracle、PostgreSQL等)。 - `GenerationType.TABLE`通过自定义表生成,跨数据库平台兼容。 - `GenerationType.AUTO`由JPA引擎根据具体数据库选择合适的策略。 7. ...

    Java探索之Hibernate主键生成策略详细介绍

    这种策略需要数据库支持sequence,如Oracle、DB、SAP DB、PostgreSQL、McKoi等。MySQL这种不支持sequence的数据库则不行(可以使用identity)。 例子:<generator class="sequence"><param name="sequence">...

    hibernate的映射文件配置

    7. **native**:由Hibernate自动选择identity、hilo或sequence之一。 8. **uuid.hex**:生成16进制的UUID作为主键。 9. **uuid.string**:生成未编码的UUID(长度16),不适用于PostgreSQL。 10. **foreign**:使用...

    java框架之hibernate

    - 适用于DB2、PostgreSQL、Oracle等数据库。 10. **Sequence-Identity**: - 特殊的序列生成策略,结合数据库序列和JDBC3的getGeneratedKeys。 - 目前仅支持面向JDK1.4的Oracle10g驱动。 11. **UUID**: - ...

    hbm.xml说明

    - **sequence**: 使用序列生成主键,适用于 Oracle, PostgreSQL 等数据库。 - **native**: 根据不同的数据库自动选择合适的策略。 - **uuid.hex**: 生成基于 UUID 的十六进制字符串作为主键。 - **uuid.string**: ...

    MybatisPlus使用手册.docx

    MybatisPlus 支持多种数据库,包括 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、PostgreSQL、SQLServer 等。 5. 内置插件 MybatisPlus 内置了多种插件,包括: * 内置分页插件:基于 MyBatis 物理分页,...

    MyBatis-Plus 3.x 文档手册

    MyBatis-Plus广泛支持多种数据库,包括MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、PostgreSQL、SQL Server和达梦数据库等。 MyBatis-Plus的这些特性使得开发人员能够更加专注于业务逻辑,而不是繁琐的数据库...

    mycat权威指南

    它不仅支持MySQL,还兼容其他关系型数据库,如Oracle、SQL Server、DB2、PostgreSQL等。Mycat作为一个高性能的数据库中间层,支持分布式事务、读写分离、数据切分、数据分片等功能,广泛应用于高并发、大数据量的...

Global site tag (gtag.js) - Google Analytics