关于ORACLE的GUID主键生成

============转自=============
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL binlog三种模式

原文出自 http://www.abcdocker.com/abcdocker/213 MySQ binlog三种模式及设置方法 1.1 Row Level 行模式 日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改优点:在row level模式下,bin-log中可以不记录执行的sql…

contenttype添加field

1 $splist.contenttypes["News"].fieldlinks.add($fieldlink) contenttypes中添加field的方法。 下面这种则不起作用 1 $splist.contenttypes["News"].fields.add($spfield) http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcontenttype.…

虚拟视频驱动程序vivi.c源码分析

虚拟视频驱动程序vivi.c源码分析以下先把上一篇文章中的最后一段,放在这里利于程序源码的分析: vivi.c 虚拟视频驱动程序----- 此代码模拟一个真正的视频设备V4L2 API (位于drivers/media/video目录下) 入口:int __init vivi_init(void) …

Cobar部署与测试

原文出自 http://www.abcdocker.com/abcdocker/84 Cobar部署与测试 一、Cobar介绍 1.1功能概述: Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。 1.1.1 Cobar核心功能: 分布…

深度css:关于浮动(float,clear)的图形化理解

接触CSS以来,有人说浮动始终给人一种神秘的感觉,正因为有了它的一成不变的table布局开始了渐渐被divcss取代,它是控制传说中文本流核心和关键要素,懂得控制“块”的流动和布局即等于控制了网页的排版和布局。今天就以简单图文形式…

amoba读写分离

原文出自 http://www.abcdocker.com/abcdocker/81 1.AMOEBA是什么 Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布…

js的parseInt函数结果为0很奇怪的问题

当执行的代码为parseInt("08")时,结果为0 而执行的代码为parseInt("0X")时,其中X为1~9之间除过8的数字,结果都是正常的数字 不太明白为什么会出现这样的结果 参考:http://lhb-ljf.iteye.com/blog/1703631 今天…

MySQL事务及字符集介绍

原文 http://www.abcdocker.com/abcdocker/77 事务介绍 简单来说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,执行时要么全成功要么全失败。 MySQL5.5支持事务的引擎:Innodb/ndb事务四大特性(ACID&…

为了IT人的荣耀,请大力支持《中国人的紧箍咒》!理由如下——

博友们请注意——老孙又出新书了! 先前,老孙从技术跨界到管理,出了一本《知道力》;如今又从管理跨界到文化,新出一本文化书《中国人的紧箍咒》。 作为登陆文化新战场的IT第一人,老孙正在诺曼底滩头独自奋战…

MyCat介绍与配置(精)

Mycat 前生今世如果我有一个32核心的服务器,我就可以实现1个亿的数据分片,我有32核心的服务器么?没有,所以我至今无法实现1个亿的数据库分片。---Mycats Plan Mycat 简介Mycat是什么? 从定义和分类来看,它是…

Linux 启动顺序

1,BIOS初始化 2,MBR(CENTOS 5.5 的bootloader分区表结束位512B) 3,GRUB (1)加载内核kernel为只读 (2)加载RAMDISK 4,INIT进程 运行文件如下: /etc…

mysql-mmm 集群高可用软件介绍

mysql-mmm 集群高可用软件介绍 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个…

搜索提示时jquery的focusout和click事件冲突问题完美解决

在主流的搜索引擎上搜索时,输入内容,往往会弹出智能提示。输入框为input,智能提示区域为suggest。接下来一般有两种操作: 1.选择某一提示,则把内容复制到input中,自动关闭suggest; 2.点击网页其…

高可用MySQL MHA介绍

MySQL MHA介绍 MHA简介 MHA是一位日本MySQL大牛用Perl写一套MySQL故障切换方案,来保证数据库系统的高可用,在宕机的事件内(通常10-30秒),完成故障转意,部署MHA,可避免主从一致性问题&#xff0c…

Tizen有用的网站

Tizen的会议上周在旧金山,打开网页,因为向公众Tizen的开发人员手机现在有很多未来的相关信息。 与其他现在介绍一些有用的网站获取相关信息。 1 Tizen.org https://www.tizen.org/另一种是现在的官方网站。 开放haetguyo,写在九月底&#xff…

Xtrabackup安装以及应用

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 xtrabackup官方网址:https://www.percona.com/downloads/XtraBackup/MySQL Ba…

控件列[Coolite]上传文件

首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责 1 .配置及单简局布 2.经常用使组件绍介 2.1 Dropdownlist结合TreePanel 2.2 拟模进度条 2.3 上传文件 2.4 TabPanel基本用法 2.5 行执台后程序示提等待息信,运行终了消逝 2.6 历遍清空ext.net textbox控…

MySQL双主配置

双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致。 这样做的好处多。 1. 可以做灾备,其中一个坏了可以切换到另一个。 2. 可以做负载均衡&…

Ubuntu 12.10连接米2

通过USB线与米2手机连接后,在终端运行:lsusb 会看到一个新的USB设备,包含信息:2717:9039 首先在/etc/udev/rules.d/目录下面创建一个文件:52-android.rules (名称为51,52,53都无所谓…

MySQL常见错误代码(转)

MySQL常见错误代码及代码说明 1005&#xff1a;创建表失败 1006&#xff1a;创建数据库失败 1007&#xff1a;数据库已存在&#xff0c;创建数据库失败<可以忽略 1008&#xff1a;数据库不存在&#xff0c;删除数据库失败<可以忽略 1009&#xff1a;不能删除数据库文件导…