天天看點

sqlserver 2005 中使用 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

值,則表必須具有指定 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      
sqlserver 2005 中使用 uniqueidentifier 資料類型
注意:
您可以使用 NEWSEQUENTIALID 生成 GUID 以減少葉級别索引上的頁争用。NEWSEQUENTIALID 隻能與 uniqueidentifier 類型的表列的 DEFAULT 限制一起使用。
uniqueidentifier

列中可以多次出現某個

uniqueidentifier

值,除非對該列也指定了 UNIQUE 或 PRIMARY KEY 限制。當多個行引用源表中的同一個主鍵時,引用其他表中

uniqueidentifier

主鍵的外鍵列中可以多次出現各個

uniqueidentifier

值。

一個表可以有多個

uniqueidentifier

列。每個表中可以指定一個具有 ROWGUIDCOL 屬性的

uniqueidentifier

列。ROWGUIDCOL 屬性指明此列的

uniqueidentifier

值可唯一地辨別表中的行。但是,屬性不會執行任何強制實作唯一性的操作。必須使用其他機制強制實作唯一性,例如指定列的 PRIMARY KEY 限制。ROWGUIDCOL 屬性主要用于 Microsoft SQL Server 2005 複制。具有更新訂閱的合并複制和事務複制使用

uniqueidentifier

列來確定在表的多個副本中唯一地辨別行。

uniqueidentifier

資料類型具有下列缺點:

  • 值長且難懂。這使使用者難以正确鍵入它們,并且更難記住。
  • 這些值是随機的,而且它們不支援任何使其對使用者更有意義的模式。
  • 也沒有任何方式可以決定生成 uniqueidentifier 值的順序。它們不适用于那些依賴遞增的鍵值的現有應用程式。
  • uniqueidentifier 為 16 位元組時,其資料類型比其他資料類型(例如 4 位元組的整數)大。這意味着使用 uniqueidentifier 鍵生成索引的速度相對慢于使用 int 鍵生成索引的速度。

在不要求全局唯一性或首選使用按序列增加的鍵時,請考慮使用 IDENTITY 屬性。

繼續閱讀