`

主流数据库和uuid

阅读更多
先说什么是uuid。全局唯一标识符 (GUID)。很多时候,并行的n个系统,要给某类产生某个编号。但是n个系统之间不能够重复,这样的编号,就要使用uuid。大家都到ms的站点去下载过东西吧,看这个链接(http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&displaylang=zh-cn)中(262d25e3-f589-4842-8157-034d1e7cf3a3)就是一个例子。在.net fcl中,有一个类专门负责这档子事,那就是System.Guid类。

在数据库中,oracle和ms均已经有了实现。在oracle中,like this:

SQL>  select sys_guid() from dual;
SYS_GUID()
--------------------------------
E5BCF4C6635AB664E03073CA38A91E02
SQL> /
SYS_GUID()
--------------------------------
E5BCF4C6635BB664E03073CA38A91E02
SQL>

这里(http://www.adp-gmbh.ch/ora/sql/sys_guid.html)有sys_guid的说明。
在我的系统中,连续的两个guid是连续的。这是非常偶然的。虽然他们是连续的,但是,绝对是不重复。我听高手说,这个以来于操作系统对guid的实现。

在oracle中,通过给某一个列(应该是char(36)或者是varchar(36)这样的类型)指定默认值为SYS_GUID(),就实现了我们需要的效果。

再来看sql-server。在sql-serer中,有一个数据类型叫做uniqueidentifier,我们把数据类型指定为这个,系统自动为这个列填充默认值newid()。来看newid的效果吧:
select newid();
select newid();
go
------------------------------------
76413BFB-B088-419B-BB73-912F3318D75F
(1 行受到影响)
------------------------------------
78CEED8C-799B-4266-A5AE-3BE83F01AF93
(1 行受到影响)

在MySQL中可以通过:
select uuid();

pg8都出来了,似乎没有uudi的类型。

laserhe他们做了一个pguuid的包,给你的pg打上这个包以后,据说,就有uuid这个类型。但是,这样的做法不具备通用性;不见得每个系统,你都可以登陆上去给人家打个包。我还听laserhe说,pg全球开发组,并不打算添加guid函数。因为他们认为双字节的随机数,也是同样的效果。

或者是为了兼容,或者是为了数据移植方便,非常有必要弄一个uuid生成工具。uuid,基本上都是mac+当前时间。ok,知道了这些,来看看我的系统上是怎么实现的:

先创建一个语言plgsql,你在执行shell命令就可以了,因为这样,可以省去一大堆参数。在shell提示符下键入
createlang -d <你的数据库名字> plpgsql

我们之所以创建这语言,是为了后面写函数的时候方便些。(标准sql会使我们的函数麻烦n多。)

现在我们来创建一个uudi函数吧。
在sql提示符下,键入:
CREATE OR REPLACE FUNCTION new_uuid()
  RETURNS text AS
'
declare
vWork1 text;
vWork2 text;
vMac text;
begin
-- replace vMac with the mac of your own box
vMac=\'00:0D:56:FD:A0:DB\';
vWork1 := md5(vMAC || now());
vWork2 := SUBSTRING(vWork1, 1,  ||\'-\'|| SUBSTRING(vWork1,9,4) ||\'-\'|| SUBSTRING(vWork1,13,4) ||\'-\'|| SUBSTRING(vWork1,17,4) ||\'-\'|| SUBSTRING(vWork1,21,12);
RETURN cast(vWork2 as varchar(36));
end;
'
  LANGUAGE 'plpgsql' VOLATILE;


请注意,用你自己的mac替换我上面写的mac地址。ok,我们的uuid函数,就ok了。看看效果吧:
lacl=# SELECT new_uuid();
               new_uuid
--------------------------------------
ac206895-90bd-2e0e-f5fa-8fb76327a1dc
(1 DD)
lacl=# SELECT new_uuid();
               new_uuid
--------------------------------------
6f376ae9-9284-52b0-92d1-3db731b64a1c
(1 DD)
lacl=#

ok,我们的sql-server风格的uuid就完成了。你在你的表里面指定某个列的某人值为new_uudi函数就可以了。比如我的一个例子:
CREATE TABLE announcement
(
  announcement_id "char"(36) DEFAULT new_uuid(),
)
分享到:
评论

相关推荐

    Ado访问PARADOX数据库

    随着技术的发展,PARADOX数据库逐渐退出主流市场,这也导致了包括ADO在内的许多现代数据库接口不再支持PARADOX。 PARADOX数据库的特点是它以独立的表形式存在,每个表即为一个数据库文件,通常扩展名为.db。此外,...

    AWS6.1-数据库表结构参考

    此外,还提供了以Oracle数据库为例的具体表结构设计案例,并对比了其他几种主流数据库管理系统中的数据类型差异。 #### 一、数据库表结构设计原则 ##### 1. 表命名规则 - **命名统一大写**:所有表名均采用大写...

    Visual C++ ADO数据库编程入门

    1. **跨平台兼容性:**ADO是基于OLE DB构建的,而OLE DB支持多种不同的数据源类型,包括但不限于SQL Server、Oracle等主流数据库。 2. **高效性:**ADO通过OLE DB与底层数据源交互,提供了高性能的数据访问机制。 3....

    Navicat Premium_11.2.7简体中文版

    这款软件支持多种主流数据库系统,包括MySQL、PostgreSQL、Oracle、SQLite、SQL Server以及MariaDB,实现了对这些数据库的统一管理和高效操作。 首先,Navicat Premium的多数据库连接功能是其核心亮点之一。用户...

    微骏CMS内容管理系统 v1.0 正式版

    1.系统支持6种主流数据库:MSSQL 2005、mysql 5.x、Oracle、Sybase、DB2、PostgreSQL(其它数据库以后版本推出)。 2.系统支持6种语言:简体中文、繁体中文、英文、日文、西班牙文、俄文。 3.系统自带模块:文章...

    主流的分布式存储技术综述

    本文将对HDFS、GFS和minio等主流分布式存储技术进行综述,并探讨其关键特性和应用场景。 Google的GFS(Google File System)是分布式文件系统领域的里程碑之作,它为大规模数据处理奠定了基础。GFS采用主从架构,由...

    mybatis代码生成工具

    - 数据库兼容性:MBG支持多种主流数据库,如MySQL、Oracle、SQL Server等,但需要确保配置文件中的JDBC驱动与所使用的数据库版本匹配。 - 表前缀处理:如果数据库表有统一的前缀,可以通过配置文件设置去除前缀,...

    Android集成主流优秀第三方组件框架

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP 已集成第三方...

    PG技术分享,pg学习资料

    PG基于SQL标准,有强大的数据处理能力和可扩展能力,因此被广泛应用于分布式数据库、文档数据库、时序数据库、图数据库和时空数据库等领域。 优势 PG有多种优势,包括: * 广泛支持大量的主流开发语言,包括C、...

    微骏CMS内容管理系统 v1.0 RC.rar

    1.系统支持6种主流数据库:MSSQL 2005、mysql 5.x、Oracle、Sybase、DB2、PostgreSQL(其它数据库以后版本推出)。 2.系统支持6种语言:简体中文、繁体中文、英文、**文、西班牙文、俄文。 3.系统自带模块:文章、...

    超级企业级ID

    6. **数据库兼容性**:代码需要设计成能与各种主流数据库(如MySQL、Oracle、SQL Server、MongoDB等)无缝对接。 本项目提供的“企业级ID 完整代码”可能包括以下几个部分: 1. **ID生成器**:这部分代码负责生成...

    jpa开发手册

    1.2 ORM(Object Relational Mapping):ORM技术旨在解决关系数据库和面向对象编程之间的不匹配问题,通过映射机制将Java对象与数据库表之间建立联系,简化数据访问。 1.3 JDO(Java Data Object):JDO是另一种ORM...

    mybatis-generator-1.3.5

    7. **支持多种数据库**:MBG支持多种主流的关系型数据库,如MySQL、Oracle、SQL Server等,能够处理各种数据库的特性。 8. **增量更新**:MBG允许用户仅针对已修改的表进行增量更新,避免了每次修改都要重新生成...

    mybatis-plus破解文件

    9. **数据库方言支持**:Mybatis-Plus支持多种主流数据库,如MySQL、Oracle、SQLServer、PostgreSQL等,并且能自动识别数据库类型,适应不同的SQL语法。 从提供的文件名称列表来看,`profile - idea - plugin - ...

    打造Node.js全栈开发工程师

    favicon、 morgan、cookie-parser、body-parser、express-session、connect-mongo、connect-flash、uuid、 async等内置各种中间件以及其它路径保护等自定义中间件,并扩展了富文本编辑器、markdown和heroku云布署等...

    构建一个分布式系统的简单方案

    - **广泛接受**:已经被数据库系统、.NET框架等多种应用场景广泛采纳。 为了方便管理和追踪进程,可以设计一个结构体来存储与进程相关的必要信息: ```c struct Process { char uuid[32]; // UUID字符串 int ip; ...

    集成目前Android主流优秀第三方组件

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员快速开发自己的APP 已集成第三方开源...

    mybatis模板生成工具

    6. **支持多种数据库**:MBG 支持多种主流数据库,如 MySQL、Oracle、SQL Server 等,只需在配置文件中指定数据库连接参数即可。 **使用步骤:** 1. **引入依赖**:将 mybatis-generator-core-2.0.5 包加入项目...

    集成安卓主流优秀第三方组件框架.zip

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员快速开发自己的APP   已集成第三方...

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员快速开发自己的APP 已集成第三方开源...

Global site tag (gtag.js) - Google Analytics