SqlServer中的UniqueIdentifier資料類型介紹

來源:互聯網
上載者:User

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是通用唯一識別碼   (GUID)
NEWID()傳回型別為uniqueidentifier
SQL   SERVER線上說明中的例子:
declare   @myid   uniqueidentifier
set   @myid=newid()
print   'Value   of   @myid   is   '+cast(@myid   as   varchar(255))
每次運行以上程式返回不同的uniqueidentifier


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   值的順序。它們不適用於那些依賴遞增的索引值的現有應用程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.