最后21分,问个NEWID为什么不重复问题!高手请进!

nlpz 2010-05-19 06:04:41
假如: 用newid()生成100亿条数据,这100亿条数据,都没有重复的概率么?

为什么能做到不重复呢?
...全文
461 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wisdom1 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 obuntu 的回复:]
计算机世界还真是神奇。。
[/Quote]

。。
obuntu 2010-11-04
  • 打赏
  • 举报
回复
计算机世界还真是神奇。。
「已注销」 2010-11-04
  • 打赏
  • 举报
回复
幸运的意外 2010-11-04
  • 打赏
  • 举报
回复
newid()生成的记录永远不会重复,算法本身就决定了这个特性了。
yy1987316 2010-11-04
  • 打赏
  • 举报
回复
漂亮,上标加不上去
yy1987316 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cxmcxm 的回复:]
数是无限的,人的需求是有限的,从数学角度来说,长度有限的newid所能容纳的个数是有限的,但已足够全球的所有电脑用于生成不重复的字符串,生成方法楼上都说了.
[/Quote]
最大容量是16<sup>32</sup>吧?不过实际情况肯定比这个要小。按可用容量为最大容量的10%,地球上每天生成10亿个guid,也大概要10<sup>25</sup>世纪才能用完。
cxmcxm 2010-05-19
  • 打赏
  • 举报
回复
数是无限的,人的需求是有限的,从数学角度来说,长度有限的newid所能容纳的个数是有限的,但已足够全球的所有电脑用于生成不重复的字符串,生成方法楼上都说了.
billyhe07 2010-05-19
  • 打赏
  • 举报
回复
Learn it
永生天地 2010-05-19
  • 打赏
  • 举报
回复
newid函数是生成的guid,lz百度看看guid
lymmingv 2010-05-19
  • 打赏
  • 举报
回复
学习........................a
zhengduan964532 2010-05-19
  • 打赏
  • 举报
回复

NEWID
创建 uniqueidentifier 类型的唯一值。

feixianxxx 2010-05-19
  • 打赏
  • 举报
回复
2台计算机在不同时刻 GUID就肯定不一样
不一样的计算机业肯定不一样
feixianxxx 2010-05-19
  • 打赏
  • 举报
回复
GUID 是根据本机网卡标志和CPU时钟信息 通过特定算法生成的二进制字符串。。。
htl258_Tony 2010-05-19
  • 打赏
  • 举报
回复
mssql中的uniqueidentifier数据类型 
最近新换了一个工作,在一个全国连锁的服装公司总部做开发,管理全国的分店进销存等的管理,以前从来没有用过uniqueidentifier这个数据类型,在分布式开发中比较常用,下面是此数据类型的相关介绍。
全局唯一标识符
尽管 IDENTITY 属性自动为表生成行号,但不同表的标识符列可以生成相同的行号。这是因为 IDENTITY 属性只须在所使用的表上保持唯一。如果应用程序需要生成在整个数据库或世界各地所有网络计算机的全部数据库中均为唯一的标识符列,请使用 ROWGUIDCOL 属性、uniqueidentifier 数据类型和 NEWID 函数。

使用 ROWGUIDCOL 属性定义全局唯一标识符列时应注意;

一个表只能有一个 ROWGUIDCOL 列,且该列必须定义为 uniqueidentifier 数据类型。


SQL Server 不为该列自动生成值。若要插入全局唯一数值,应为列创建 DEFAULT 定义,以使用 NEWID 功能生成全局唯一数值。


在设置 ROWGUIDCOL 属性后,使用 ROWGUIDCOL 关键字可在选择列表中引用该列。这与使用 IDENTITYCOL 关键字引用 IDENTITY 列相似。


可使用 OBJECTPROPERTY 函数确定表是否含有 ROWGUIDCOL 列,使用 COLUMNPROPERTY 函数确定 ROWGUIDCOL 列的名称。


由于 ROWGUIDCOL 属性不强制唯一性,所以应使用 UNIQUE 约束以确保插入 ROWGUIDCOL 列的值是唯一的。


uniqueidentifier 数据类型存储 16 字节的二进制值,该值的使用与全局唯一标识符 (GUID) 一样。GUID 是一个唯一的二进制数字;世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符。

uniqueidentifier 列的 GUID 值通常由以下方式获得:

在 Transact-SQL 语句、批处理或脚本中调用 NEWID 函数。


在应用程序代码中,调用返回 GUID 值的应用程序 API 函数或方法。
Transact-SQL NEWID 函数以及应用程序 API 函数和方法从它们网卡上的标识数字以及 CPU 时钟的唯一数字生成新的 uniqueidentifier 值。每个网卡都有唯一的标识号。由 NEWID 返回的 uniqueidentifier 使用服务器上的网卡生成。由应用程序 API 函数和方法返回的 uniqueidentifier 使用客户机上的网卡生成。

一般不将 uniqueidentifier 定义为常量,因为很难保证实际创建的 uniqueidentifier 具有唯一性。指定 uniqueidentifier 常量的方法有两种:

字符串格式
'6F9619FF-8B86-D011-B42D-00C04FC964FF'
二进制格式
0xff19966f868b11d0b42d00c04fc964ff
uniqueidentifier 数据类型不象IDENTITY 属性那样为新插入的行自动生成新的ID。为了得到新的 uniqueidentifier 值,表必须具有一个指定 NEWID 函数的 DEFAULT 子句,或使用 NEWID 函数的 INSERT 语句:

CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO
uniqueidentifier 列可以包含多次出现的 uniqueidentifier 值,除非也对此列指定了 UNIQUE 或 PRIMARY KEY 约束。当有多行引用源表中的同一主键时,引用其它表的 uniqueidentifier 主键的外键列将包含多次出现的个别 uniqueidentifier 值。

一个表可以有多个 uniqueidentifier 列。每个表中可以指定一个具有 ROWGUIDCOL 属性的 uniqueidentifier 列。ROWGUIDCOL 属性表明此列的 uniqueidentifier 值唯一地标识表中的行。但是,该属性并没有执行该唯一性。唯一性必须通过其它机制来执行,比如为列指定 PRIMARY KEY 约束。ROWGUIDCOL 属性主要用于 SQL Server 复制。

uniqueidentifier 数据类型的主要优点是保证由 Transact-SQL NEWID 函数或应用程序 GUID 函数生成的值在全球是唯一的。

uniqueidentifier 数据类型的具有几个缺点:

值长且难懂。这使用户难以正确键入它们,并且更难记住。


这些值是随机的,而且它们不能接受任何使它们对用户变得更有意义的模式。


没有任何方式可以决定生成 uniqueidentifier 值的顺序。它们不适用于那些依赖递增的键值的现有应用程序。


uniqueidentifier 数据类型具有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着使用 uniqueidentifier 键建立的索引可能会比使用 int 键实现的索引相对慢一些。


在设计分布式数据库时非常有用。
来源:http://blog.hidotnet.com/Databinder/archive/2007/06/22/359.aspx
转一篇博文希望能帮助理解。
挨踢直男 2010-05-19
  • 打赏
  • 举报
回复
因为是从 网卡 标识数字 以及cpu时钟的唯一数 生成的

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧