============转自=============
http://blog.sina.com.cn/s/blog_53d3c24a0100mplc.html
项目中若采用oracle数据库,则主键生成可以有两种方式,一是用sys_guid(),二是定义一个sequence,然后用nextval得到ID。
Oracle的定义sequence例子:
create sequence seq_test
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;
从网络搜索得到的结论看,一般的意见总结为:
1.SYS_GUID()比sequence复杂;
2.SYS_GUID做主键,则表、索引存储开销多;
3.SYS_GUID索引查询比sequence慢;
但实际上,若每天5万条记录,则一年365*50000=18250000条记录,则理论上需要多耗费空间约合 1.46 GB 存储空间.显然,这些空间对当前的服务器的内存系统而言,影响并不大(按月分区), 就磁盘消耗而言都是微不足道的.
查询的时候用guid和sequence执行计划也是差不多的,也就是查询效率并不一定差。
从实践来看,使用SYS_GUID()做主键的优点多于负面影响。特别是在多个数据库数据集成时,GUID的优点显而易见。而关系数据库设计的法则约定:“主键不要代表任何意义”,更何况开发商既然提供这个功能而且一直在用,所以它的存在自有它的可取之处,因此建议采用guid。 
的确,在现有项目中由于中小学数据库不在同一个数据库服务器上,user表中主建ID使用的是sequence方式。这样导致了项目在运行之2个库表的ID重复,很难整合在一起,因此想到了M记Sql Server中的GUID类型,使用它做为主键后跨主机跨数据库的ID重复将可以被有效解决,在将来可能的系统集成或迁移中将完全不受ID重复问题的困扰。
下面是ORACLE中利用SYS_GUID ()函数实现兼容M记Sql Server中GUID类型规格的GUID串:
CREATE OR REPLACE FUNCTION GET_GUID
   RETURN CHAR
IS
   v_guid              CHAR (38);
   v_guid_part_one     CHAR (8);
   v_guid_part_two     CHAR (4);
   v_guid_part_three   CHAR (4);
   v_guid_part_four    CHAR (4);
   v_guid_part_five    CHAR (12);
BEGIN
   SELECT SYS_GUID ()
     INTO v_guid
     FROM DUAL;
v_guid_part_one := SUBSTR (v_guid, 0, 8);
   v_guid_part_two := SUBSTR (v_guid, 8, 4);
   v_guid_part_three := SUBSTR (v_guid, 12, 4);
   v_guid_part_four := SUBSTR (v_guid, 16, 4);
   v_guid_part_five := SUBSTR (v_guid, 20, 12);
   v_guid :=
    CONCAT
     (CONCAT
        ('{',CONCAT
           (CONCAT
               (CONCAT
                   (CONCAT (CONCAT (CONCAT (CONCAT (CONCAT (v_guid_part_one,
                                                            '-'),
                                                    v_guid_part_two
                                                   ),
                                            '-'
                                           ),
                                    v_guid_part_three
                                   ),
                            '-'
                           ),
                    v_guid_part_four
                   ),
                '-'
               ),
            v_guid_part_five
           )
    ),
   '}'
  );
   RETURN (v_guid);
END GET_GUID;
/

转载于:https://www.cnblogs.com/zjw520/archive/2013/04/23/3036979.html

关于ORACLE的GUID主键生成相关推荐

  1. hibernate native oracle,hibernate native 主键生成策略

    前一次做个系统用的oracle数据库,使用hibernate生成主键的策略是SEQUENCE,当时觉得很累,因为不知道怎么的,oracle+sequence+trigger怎么也取不到新增数据时的主键 ...

  2. hibernate 7大主键生成策略详解与对象状态

    一:代理主键_主键自增 1.identity 1.采用底层数据库本身提供的主键生成标识符,条件是数据库支持自动增长数据类型 2.该生成器要求在数据库中把主键定义成为自增长类型.适用于代理主键 2.in ...

  3. Hibernate各种主键生成策略与配置详解 - 真的很详细啊!!

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  4. hibernate之主键生成策略

    一.主键类型 1.自然主键(主键本身就是表中的一个字段,实体中一个具体的属性) 表中已经具有某字段,并且该字段具有业务含义作为主键,称之为自然主键. 例如:在person表中的身份证号,既是唯一的,又 ...

  5. 基于按annotation的hibernate主键生成策略

    这里讨论代理主键,业务主键(比如说复合键等)这里不讨论. 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id ...

  6. Hibernate标识符属性(主键)生成策略全析

    数据库中的主键能够唯一识别一条记录,它可以是一个字段也可以是多个字段的组合.主键的主要作用是标识表中的一条记录,还有和其他表中的数据进行关联.数据库中的主键类型必须符合唯一性约束和非空约束.作为附加属 ...

  7. jpa 根据主键生成策略获取id_JPA主键生成策略

    @GeneratedValue: 为一个实体类生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键).它有两个属性,分别是strategy和generator. genera ...

  8. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

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

    为什么80%的码农都做不了架构师?>>>    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibern ...

最新文章

  1. 微信开发者和其他服务器区别,求教微信公众号开发中两种认证技术的区别?
  2. android 内部类的优化
  3. 一套代码小程序WebNative运行的探索01
  4. 2020双十一实时大屏_双十一实时“战报”来了,你贡献了多少?
  5. LeetCode-166- Fraction to Recurring Decimal
  6. mysqlsql varchar类型只取前四个_Apache Doris0.12.0 发布,进入 Apache 孵化器后第四个正式版本...
  7. python中dict和lambda结合的小例子
  8. “docker exec“ requires at least 2 arguments. See ‘docker exec --help‘.
  9. android多线程文章,Android 多线程处理之多线程用法大集合
  10. toString()和String.valueOf()的区别(转)
  11. solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity
  12. Enterprise Blocks
  13. 【clickhouse】docker 下 搭建 clickhouse 监控
  14. python os.path.splitext()的用法_Python中的os.path路径模块中的操作方法总结
  15. 【转载】APP通用测试用例大全
  16. SpringBoot官方文档学习
  17. 华为浏览器工具箱 html修改,华为电子文档浏览器(HedEx Lite)
  18. hadoop-HFDS
  19. 3D,点云分割,不要割个寂寞
  20. 高速PCB设计入门概念

热门文章

  1. 每个java小应用程序都得继承,JAVA复习题3
  2. stm32 HSE HSI
  3. php 年月日 中文,php Date()函数输出中文年月日时分秒_PHP教程
  4. java计算距离_java实现计算地理坐标之间的距离
  5. IDEA运行VUE npm install报错:chromedriver@2.27.2 install: node install.js
  6. 基于Java jsp+servlet超市订单管理平台设计和实现【建议收藏】
  7. 服务禁止方法_Linux禁止ping以及开启ping的方法
  8. 爬虫之祖urlib 简易教程
  9. arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...
  10. A6.2021年全国数学建模竞赛C题分析-生产企业原材料的订购与运输