精华内容
下载资源
问答
  • 使用guid作为唯一标识
    2021-01-15 02:01:34

    摘要:

    当我们在设计表时,通常需要为主业务表设置一个数据库系统内部ID作为主键,

    下文讲述通过标识列和全球唯一标识列作为默认值设置主键的方法,

    如下所示:

    实验环境:sql server 2008 R2

    方法1:标识列生成主键

    ---由于表test中列keyId指定了identity属性,因此插入时,不能指定值,系统会自动默认keyId中的值,

    ---此标识信息,由数据库底层控制,不会出现重复值,并且会按照标识种子的定义,依次流水下来。

    create table test (keyId int identity(1,1) primary key,info varchar(30))

    go

    insert into test(info)values('maomao365.com')

    insert into test(info)values(N'sql教程')

    go

    truncate table test

    drop table test

    方法2:全球唯一标识列生成主键

    ---表test中列keyId指定了默认值newId(),由于newId会自动生成全球唯一标识信息,此值永远都不会重复

    create table test (keyId uniqueidentifier default newId() primary key,

    info varchar(30))

    go

    insert into test(info)values('maomao365.com')

    insert into test(info)values(N'sql教程')

    go

    truncate table test

    drop table test

    更多相关内容
  • 使用 GUID 值来作为数据库行标识讲解
  • GUID全球唯一标识

    2019-10-05 22:04:20
    全球唯一标识GUID GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。 GUID 的格式为“xxxxxxxx-...

    GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。

    GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

    世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

    在这次开发 ASP.NET 应用时,我大量使用了类型为 GUID 的 ID 列作为各实体表的关键字(键)。由于其唯一、易产生的特性,给应用程序处理带来诸多好处。

    1、在 SQL Server 中使用 GUID

    如果在 SQL Server 的表定义中将列类型指定为 uniqueidentifier,则列的值就为 GUID 类型。

    SQL Server 中的 NewID() 函数可以产生 GUID 唯一值,使用此函数的几种方式如下:

    1) 作为列默认值

    将 uniqueidentifier 的列的默认值设为 NewID(),这样当新行插入表中时,会自动生成此列 GUID 值。

    2)使用 T-SQL

    在 T-SQL 中使用 NewID()函数,如“INSERT INTO Table(ID,... ) VALUES(NewID(),...)”来生成此列的 GUID 值。

    3)提前获取 GUID 值

    由于特殊功能需要,需要预先获知新行的 ID 值,也可以使用如下 C# 代码提前获得 GUID 的值,再存储到数据库中:

    SqlCommand cmd = New SqlCommand();
    cmd.CommandText = "SELECT NewID()";
    string rowID = (string) cmd.ExecuteScalar();
    cmd.CommandText = "INSERT INTO Table(ID,...) VALUES(@ID,...)
    cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value = new Guid(rowID);
    cmd.ExecuteNoQuery();

    uniqueidentifier 值不能进行算术运算,但可以进行(意义不大的)比较操作和 NULL 检查;它不能象 IDENTITY 列一样,可以获知每行的增加时间的先后顺序,只能通过增加其它时间或时间戳列来完成此功能。

    2、在 .NET 中使用 GUID

    GUID 在 .NET 中使用非常广泛,而且 .NET Framework 提供了专门 Guid 基础结构。

    Guid 结构的常用法包括:

    1) Guid.NewGUID()

    生成一个新的 GUID 唯一值

    2) Guid.ToString()

    将 GUID 值转换成字符串,便于处理

    3)构造函数 Guid(string)

    由 string 生成 Guid 结构,其中string 可以为大写,也可以为小写,可以包含两端的定界符“{}”或“()”,甚至可以省略中间的“-”,Guid 结构的构造函数有很多,其它构造用法并不常用。

    同时,为了适用数据库中使用 GUID 的需要,.NET Framework 也提供了 SqlGUID 结构,它和 Guid 结构类似,只是两者对排序(CompareTo)的处理方式不同,SqlGuid 计算值的最后 6 个字节。而 Guid 计算全部 16 个字节,这种差异可能会给 SQL Server 中 uniqueidentifier 列的排序带来一定影响,当然这种排序意义也不大。

    .NET Framework 中可以使用类 GuidConverter 提供将 Guid 结构与各种其他表示形式相互转换的类型转换器。


    3、GUID 的优缺点

    1) 优点

    同 IDENTITY 列相比,uniqueidentifier 列可以通过 NewID() 函数提前得知新增加的行 ID,为应用程序的后续处理提供了很大方便。


    便于数据库移植,其它数据库中并不一定具有 IDENTITY 列,而 Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的 GUID 值存入数据库,它不会对原有数据带来影响。


    便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而 uniqueidentifier 列则无需任何处理,直接用 T-SQL 加载即可。


    便于对某些对象或常量进行永久标识,如类的 ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。
    2) 缺点

    GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的,所以使用时要注意场合,最好不要尝试用它来作为你的电子邮件地址 J


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

    转载于:https://www.cnblogs.com/xubin-747/p/4743471.html

    展开全文
  • 场景在进行开发过程中如果需要唯一标识GUID(全局唯一标识符)。全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的...

    场景

    在进行开发过程中如果需要唯一标识的GUID(全局唯一标识符)。

    全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。

    Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。

    注:

    实现

    确保电脑中安装SqlServer 然后打开SqlServer Management

    Studio并连接到数据库。

    新建一个查询

    然后直接

    print newid()

    如果不想要中间的-可以使用如下查询语句

    print replace(newid(),'-','')

    展开全文
  • 第一种策略:使用设备id作为用户的唯一标识 这种策略的弊端: ①一个账号可能登陆了多个设备,会被标记为多个用户 ②一个设备登录了多个账号,会被标记为一个用户 第二种策略:使用账号作为用户的唯一标识 这种...

    含义:

    为每条日志数据都打上这条日志所属的用户的唯一标识

    目的:

    为后续的数据分析提供方便

    策略:

    第一种策略:使用设备id作为用户的唯一标识

    这种策略的弊端:

       ①一个账号可能登陆了多个设备,会被标记为多个用户

       ②一个设备登录了多个账号,会被标记为一个用户

    第二种策略:使用账号作为用户的唯一标识

    这种策略的弊端:

       ①有些数据中根本没有账号

       ②有些用户还没有注册账号,这部分数据会丢失

    所以使用第三种策略,动态绑定设备账号

    ①维护一张设备账号绑定权重表,用来为数据中没有账号的数据获取其对应的账号

    该表中存储device_id,account,weight(权重),last_login几个字段,日志数据中没有账号但是以前注册过的设备,可以根据权重从该表中获取到其对应的账号.

    ②维护一张空设备临时guid映射表,为以前没有注册过账号的设备打上一个临时的guid

    临时guid生成的规则:根据公司的用户量,取一个远远大于用户量的数字(比如20亿)开始递增生成临时的guid

    核心思想:

    如果数据中有账号,使用账号对应的user_id作为guid,如果没有账号,从设备账号绑定权重表以及空设备临时guid映射表中获取

    guid的生成流程:

    1)如果日志数据中已经带有账号的话,直接使用账号去业务库中的用户账号注册表中查询该条日志数据所对应的guid

    2)如果日志数据中没有账号的话,去设备账号绑定权重表中查询,如果能查询到,将权重最大的账号作为该条数据的账号,再去业务库中的用户账号注册表中查询该条数据所对应的guid

    3)如果日志数据中没有账号,而且从设备账号绑定权重表中查不到该设备的账号,说明这个设备没有注册过账号,所以去空设备临时获取该空设备对应的临时guid

    展开全文
  • I have an application that uses GUID as the Primary Key in almost all tables and I have read that t
  • 今天听了MSDN的WebCast,是关于Entlib的数据访问的讲座,末尾我问了两个自己所关心的问题:在一个较大型的应用中...在数据库的主键的设立中(同时支持多种数据库)直接用GUID作为主键来得简单,但是在查询的时候影响性...
  • ACCESS中使用GUID全局唯一标识符的自动唯一编号 同步复制ID 之解决方法
  • 使用Guid作为数据库行标识

    千次阅读 2014-02-24 19:47:47
    GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一标识号)以及 CPU 时钟的唯一数字生成的 的一个 16 字节的二进制值。 GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-...
  • C#中GUID (得到唯一的标识符)GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器... 一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使...
  • 自定义 GUID(全局唯一标识符)

    千次阅读 2021-12-01 11:12:55
    全局唯一标识符(GUID)是一种通过算法生成的标识符,典型的,是通过生成二进制长度为 128 位的数字标识符来作为 GUID, 这样的 GUID 的总数达到了2^128个( 约为万亿亿亿亿个),基本(理论上)能做到全宇宙唯一了。...
  • 一种很诱人的选择是使用GUID作为唯一键值。GUID(全局唯一标识符),也称为UUID,长128-bit的值,能保证在所有时间和空间上独一无二。RFC 41222 描述了创建标准GUID,如今大多数GUID生成算法通常是一个很长的随机数...
  • 唯一编号算法:生成GUID

    千次阅读 2019-05-02 22:04:20
    你有过生成不重复编号的想法吗?...GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。它使用网卡MAC、地址、纳秒级时间、芯片ID码和许多可能的数字,这样...
  • .NET中使用GUIDGUID 在 .NET 中使用非常广泛,而且 .NET Framework 提供了专门 Guid 基础结构。Guid 结构的常用法包括:1) Guid.NewGUID()生成一个新的 GUID 唯一值2) Guid.ToString()将 GUID 值转换成字符串,便于...
  • 需求分析:在数据库中使用全局唯一标识,然后对数据库进行性能测试,如把GUID作为主鍵,然后对数据库进行查询操作参考资料:(http://dragonpro.cnblogs.com/archive/2005/06/03/167664.aspx) 转载于:...
  • 主要介绍了浅谈JAVA如何生成UUID唯一标识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 摘要:我们可以使用uuid1的后16位来标识一个机器。# use machine specific uuid, last 16 char will be the same if machine is the samemid = uuid.uuid1().get_hex()[16:]1 uuid的其他模块 概述:UUID是128位的...
  • imei是设备的一个编号值,获取比较方便,不过有些设备的设备编号获取不到,...UUID生成的原理,先获取设备的标识信息,如果能够获取到就使用该获取到的值,否则就生成一个随机数,然后通过缓存和文件的方式保存这个值。
  • 全球唯一标识GUID

    2016-05-28 22:45:00
    GUID:即GloballyUniqueIdentifier(全球唯一标识符)也称作UUID(UniversallyUniqueIDentifier)。GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID主要用于在拥有多个节点...
  • 使用GUID作为标识

    2009-12-07 14:21:42
    GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。 GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-...
  • 如何在 C#8 中使用 GUID

    2020-12-21 16:34:25
    在程序开发中经常会用到 GUID (全球唯一标志符) 的场景,GUID 就像数据库中的主键,它能够确保一些非常重要的信息,比如说:客户数据或发票不会出现重复或者数据被覆盖,如果没有GUID的话,你很难保证数据不丢失以及...
  • Oracle中的:sys_guid唯一标识和传统的序列sequence的区别 SYS_GUID (),是Oracle 8i 后提供的函数。SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成。例如:SELECT sys_guid() from dual Oracle8i...
  • 聊聊用 UUID/GUID 作为主键那些坑

    千次阅读 2020-02-16 11:40:35
    访问欠友好的 UUID我刚读了一篇有关如何扩展数据库的文章,作者建议将 UUID(类似于 GUID)用作数据库表的主键(PK)。使用 UUID 的优点与自动递增整数相比,将 UUID 用...
  • C#中使用GUID

    2017-09-12 22:23:00
    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是... 一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数。 2. G...
  • 本文总结了ABAP中生成GUID的各种方式
  •   谷歌在Android 10(API 级别 29)对不可重置的标识符(包括 IMEI 和序列号)添加了限制,导致我们无法获取到对应的IMEI值,不过给了我们其他方法就是获取GUID作为唯一表示: 关于   最近项目上需求需要在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,640
精华内容 4,656
关键字:

使用guid作为唯一标识