SqlServer中的數據類型UniqueIdentifier


SqlServer中的數據類型UniqueIdentifier到底是什么東東?

該類型一般用來做為主鍵使用,可用SQL語法的newid()來生成一個唯一的值。
我想請問的是,這個值是一個長整型的數據值呢,還是個其它的什么值?我在程序中該如何去控制他?
歡迎多多交流。
 
 
 

摘自幫助:

uniqueidentifier
全局唯一標識符 (GUID)。

注釋
uniqueidentifier 數據類型的列或局部變量可用兩種方法初始化為一個值: 

使用 NEWID 函數。


將字符串常量轉換為如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制的數字)。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即為有效的 uniqueidentifier 值。 
比較運算符可與 uniqueidentifier 值一起使用。然而,排列並非通過比較兩個值的位模式來實現。允許對 uniqueidentifier 值執行的操作只有比較 (=, <>, <, >, <=, >=) 和檢查 NULL(IS NULL 和 IS NOT NULL)。不允許使用其它算術運算符。所有的列約束及屬性(IDENTITY 除外)均允許用於 uniqueidentifier 數據類型。 


使用 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 具有唯一性。指定 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 鍵實現的索引相對慢一些。 
如果全局唯一性並不是必須的,或者需要一個連續遞增的鍵,則可以考慮使用 IDENTITY 屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM