数据库主键UUID生成方式

UUID:全局唯一标识符 (GUID)。为什么采用这种主键生成方式?因为是全局唯一,当需要将一张表的数据导入到另外一张表时,避免存在主键冲突。

当然,guid并不是完美的。guid缺点也非常明显:

1.GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的,所以使用时要注意场合。

2.GUID 的值有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着如果在数据库中使用 uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。



下面是本人收集的部分guid的使用方式。如有建议或错误,可以留言。

1,由程序自动生成

C++

#include <objbase.h>
#include <stdio.h>
//--生成GUID
const char* newGUID()
{
static char buf[64] = {0};
GUID guid;
if (S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf, sizeof(buf)
, "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0], guid.Data4[1]
, guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
, guid.Data4[6], guid.Data4[7]
);
}
return (const char*)buf;
}
int main(int argc, char* argv[])
{
//--COM
CoInitialize(NULL);
printf(newGUID());
printf("\n");
//--COM
CoUninitialize();
return 0;
}

C#

using System;
namespace GUID测试
  {
  class Program
  {
  static void Main(string[] args)
  {
  Console.WriteLine(System.Guid.NewGuid());
  Console.ReadKey();
  }
  }
  }

Java

import java.util.UUID;
public class guid {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
UUID uuid = UUID.randomUUID();
System.out.println(".{"+uuid.toString()+"}");
}
}

2.由数据库生成(只列了当前主流的数据库 oracle/sql-server/mysql)

oracle

 

select sys_guid() from dual;
 
数据类型是 raw(16) 有32个字符。
 

sql-server

 

在sql-serer中,有一个数据类型叫做uniqueidentifier,我们把数据类型指定为这个,系统自动为这个列填充默认值newid()。

select newid();

 

mysql

 

select uuid();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值