数据库主键UUID生成方式
来源:互联网 发布:什么是p2p网络借贷 编辑:程序博客网 时间:2024/05/16 09:17
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();
}
}
}
{
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
- 数据库主键UUID生成方式
- grails中主键的uuid生成方式
- Hibernate的uuid主键生成方式
- 生成主键码uuid
- UUID生成主键
- uuid 生成主键
- 生成UUID作为主键
- UUID生成系统主键
- UUID主键生成
- 数据库主键生成方式分析
- SSH自动生成主键+UUID生成主键
- JAVA生成UUID主键值
- Jpa主键UUID生成策略
- hibernate annotation 生成uuid主键
- hibernate uuid主键生成模式
- hibernate uuid主键生成模式
- ORACLE uuid自动生成主键
- oracle 使用uuid生成主键
- 组网流程
- (管道)写入子shell
- WINCE设备开机灰屏问题(很怪异)
- 在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails
- Log4j配置详解
- 数据库主键UUID生成方式
- sed
- 网赚
- VC6.0操作PowerPoint
- 【OpenCV】访问Mat中每个像素的值(新)
- LayoutParams的用法
- Ubuntu 下配置 ccache
- Android如何防止apk程序被反编译
- 公司drag热过热刚刚