回答
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