使用 uniqueidentifier 數據

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 常量:
        字符串格式: '6F9619FF-8B86-D011-B42D-00C04FC964FF'
        二進制格式: 0xff19966f868b11d0b42d00c04fc964ff
uniqueidentifier 數據類型不會按照 IDENTITY 屬性的方式爲插入的行自動生成新的 ID。
uniqueidentifier 列中可以多次出現某個 uniqueidentifier 值,除非對該列也指定了 UNIQUE 或 PRIMARY KEY 約束。當多個行引用源表中的同一個主鍵時,引用其他表中 uniqueidentifier 主鍵的外鍵列中可以多次出現各個 uniqueidentifier 值。
一個表可以有多個 uniqueidentifier 列。每個表中可以指定一個具有 ROWGUIDCOL 屬性的 uniqueidentifier 列。ROWGUIDCOL 屬性指明此列的 uniqueidentifier 值可唯一地標識表中的行。但是,屬性不會執行任何強制實現唯一性的操作。必須使用其他機制強制實現唯一性,例如指定列的 PRIMARY KEY 約束。ROWGUIDCOL 屬性主要用於 MicrosoftSQL Server 複製。具有更新訂閱的合併複製和事務複製使用 uniqueidentifier 列來確保在表的多個副本中唯一地標識行。

例如,若要獲取新的 uniqueidentifier 值,則表必須具有指定 NEWID 函數或 NEWSEQUENTIALID 函數的 DEFAULT 子句,或 INSERT 語句必須使用 NEWID 函數。

CREATE TABLE MyUniqueTable
(
UniqueColumn        UNIQUEIDENTIFIER        DEFAULT        NEWID(),
Characters VARCHAR(10)
)
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO


注意:

您可以使用 NEWSEQUENTIALID 生成 GUID 以減少葉級別索引上的頁爭用。NEWSEQUENTIALID 只能與 uniqueidentifier 類型的表列的 DEFAULT 約束一起使用。

uniqueidentifier 數據類型具有下列缺點:
  • 值長且難懂。這使用戶難以正確鍵入它們,並且更難記住。
  • 這些值是隨機的,而且它們不支持任何使其對用戶更有意義的模式。
  • 也沒有任何方式可以決定生成 uniqueidentifier 值的順序。它們不適用於那些依賴遞增的鍵值的現有應用程序。
  • uniqueidentifier 爲 16 字節時,其數據類型比其他數據類型(例如 4 字節的整數)大。這意味着使用 uniqueidentifier 鍵生成索引的速度相對慢於使用 int 鍵生成索引的速度。
在不要求全局唯一性或首選使用按序列增加的鍵時,請考慮使用 IDENTITY 屬性。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章