全局唯一標識符(GUID,Globally Unique Identifier)是一種由特定算法生成的二進制長度為128位的數字標識符。在理想情況下,任何計算機和計算機集群都不會生成兩個相同的GUID。GUID 的總數達到了2^128(3.4×10^38)個,所以隨機生成兩個相同GUID的可能性非常非常非常小,但並不為0,用於生成GUID的算法通常都加入了非隨機的參數(如時間),以保證這種重復的情況不會發生。GUID字符串形式格式是“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中x表示0-9或a-z中的任意字符,例如5ff62d65-492f-4b30-81b4-d0c23a4560dd就是一GUID字符串。
C#生成GUID(默認小寫):
//生成新guid Guid guid1 = Guid.NewGuid(); Console.WriteLine(guid1.ToString()); //利用guid字符串構造出guid Guid guid2 = new Guid(guid1.ToString()); Console.WriteLine(guid2.ToString()); Console.ReadLine();
Sql Server生成GUID(默認大寫):
select NEWID() //對應的數據庫表字段類型是uniqueidentifier
相比於Int或Long類型的主鍵標識而言,用GUID作為記錄的唯一主鍵標識不容易記憶、沒有規律、沒有順序,存儲長度較大、索引時間較慢。不過從整體來看,用GUID作為對象的唯一標識還是優於傳統的Int或Long類型的自增主鍵。首先,GUID值在任何一個有限的時空尺度內幾乎可以認為用不完、不重復;其次,新增記錄時可以提前獲取作為主鍵的GUID值,減少一次數據庫交互操作,而如果以傳統的Int或Long類型的字段作為自增主鍵,那么新增一條記錄前必須執行一次數據庫插入操作以獲取這個最新的自增主鍵;再次,用GUID作為記錄的唯一標識具有數據可移植性,可以認為GUID值是跨表、跨數據庫、跨系統的,而傳統的Int或Long類型的自增主鍵則只能限定在某一特定系統、某一特定數據庫的某一特定表中。
