回答
NEWID()是SQL Server中的唯一登录者,它是16字节的GUID。
见 http://msdn.microsoft.com/en-us/library/ms187942.aspx 和 http://en.wikipedia.org/wiki/Globally_unique_identifier
NEWID将是唯一为您的机器,但不一定是唯一到处所有机器。
如果2 **不同的**数据库在同一台机器上运行NEWID(), 是否保证永远不会有冲突? – Gerray
期望这是安全的。 – cwallenpoole
NEWID()
是SQL Server中的一个非确定性函数,它返回类型为uniqueidentifier
的唯一值。 MSDN文档明确指出:“返回一个唯一值”。
您可以使用它像这样:
DECLARE @foo uniqueidentifier = NEWID();
SELECT @foo;
您也可以使用它作为一个表中的默认列值。
CREATE TABLE [dbo].[TestTable](
[ID] [uniqueidentifier] NOT NULL DEFAULT newid(),
)
服务器在两个数据库上生成相同GUID的机会非常小。太小,不用担心。为了探索/测试/确认这一点,你必须分析NEWID()
的实现。
它在统计学上足够独特。在发生碰撞之前,世界将会结束。
在大多数机器互相发送数据的大多数复制方案中,GUID是必需的:不能在没有GUID的情况下设置复制。所以当然可以在很多机器上使用
NEWID()
值是随机生成的。虽然从统计学角度而言,机会由NEWID()
返回的值可能会发生冲突,根据全部机器在全球范围内生成值,但您需要担心更多可能发生的事件,例如整个服务器自发燃烧。
在一台Windows机器,有一个单一的Windows功能负责其成为可通过NEWID()
函数的值,它甚至不太可能产生连续两个相同的值比任何两个随机机这样做 - 所以概率是,低于,在同一台机器上的两个不同数据库上的调用将产生相同的值。
这是我的理解(虽然我无法验证)NEWID()使用RPC UUIDCreate生成从机器的MAC地址,随机数和日期和时间戳得出的唯一GUID。另外UUIDCreate专门为每个呼叫返回一个唯一的ID。我还没有遇到任何问题。由于包括Active Directory在内的许多功能都非常依赖于唯一的GUID,因此我相当肯定Microsoft确保此方法确实能够跨机器生成唯一的标识符。我知道的唯一风险是当两台机器具有相同的MAC地址时。也许有人可以找到定义算法的特定文档。
- 1. Java查找两台服务器是否在同一台机器上运行
- 2. 一台机器上有两个不同的JVM的石英?
- 3. 在同一台机器上运行两个Jetty服务器
- 4. 是否有可能在一台主机上运行同一台机器上的多个MySQL从站?
- 5. FireDAC与同一台机器上的多个Delphi版本冲突
- 6. 在同一台机器上同时运行2个webdriver实例
- 7. 在同一台机器上运行两个logstash实例
- 8. 如何在同一台机器上同时运行JSP和PHP
- 9. 将同一台机器上的所有数据从一个SQLServer数据库复制到另一个机器上
- 10. 我们可以在同一台机器上运行两个不同执行器的gitlab运行器吗?
- 11. Solr在同一台机器上分片是否有用?
- 12. MySQL Server 5.7和WAMPServer在同一台机器上不能运行
- 13. 在同一台机器上同时运行Windows 7和Server 2012
- 14. 在同一台机器上同时运行python 2.6和3.1
- 15. 在同一台机器上为不同的应用程序运行多个jvms
- 16. 如何在两台不同的机器上连接两个mysql数据库?
- 17. 同一台机器
- 18. 同一台机器
- 19. 如何在同一台机器上同步不同MySQL数据库的两个表?
- 20. 在同一台Windows机器上运行库存python和Anaconda
- 21. 同步两个mysql数据库两台远程机器
- 22. 聚合物 - 同一台机器上的两台浏览器
- 23. 如何连接2台运行在同一台机器上的虚拟主机?
- 24. Ajax跨域在同一台机器上,但不同的端口
- 25. 运行在同一台机器上的多个Java程序
- 26. 在多台机器上管理主目录有一些不同?
- 27. Liferay在同一台机器上集群
- 28. IPC在同一台机器上... WCF
- 29. iOS4.2和iOS4.1在同一台机器上?
- 30. 不同的浏览器是指在同一台机器
我认为你需要在这里得到更多的细节。我假设你正在谈论MS SQL Server,但尚不清楚。另外它通常有助于发布一些代码,以便用户可以了解您正在讨论的背景。 – bittersweetryan
是的,我的意思是mssql服务器 – Gerray