基本介紹
簡介,定義,賦值,1,2,3,保存,NewID(),優點,缺點,主鍵,相關語句,
簡介
uniqueidentifier數據類型可存儲16位元組的二進制值,其作用與全局唯一標記符(GUID)一樣。GUID是唯一的二進制數:世界上的任何兩台計算機都不會生成重複的GUID值。GUID主要用於在用於多個節點,多台計算機的網路中,分配必須具有唯一性的標識符。 在SQL中 ROWGUIDCOL表示新列是行的全局唯一標識列。對於每個表只能指派一個uniqueidentifier 列作為ROWGUIDCO列。ROWGUIDCOL屬性只能指派給uniqueidentifier列
定義
Uniqueidentifier 是全局唯一的標識
賦值
UniqueIdentifier 數據類型的列如何賦值?
1
使用 NewID() 函式 來實現
2
直接將字元串的常量轉化成這樣的格式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
舉例:6F9619FF-8B86-D011-B42D-00C04FC964FF 為有效的UniqueIdentifier數據
3
直接賦於32位的十六進制整數
舉例 0xffffffff00000000ffffffff00000000
保存
UniqueIdentifier 數據類型 數據實際是怎么在資料庫中保存的?
UniqueIdentifier 數據類型存儲實際的數據是16個位元組的二進制值,
UniQueIdentifier 可以轉化成實際的字元串型和二進制數據類型
NewID()
NewID()函式是如何生成唯一的UniqueIdentifier 值的呢?
NewID()函式是從他們的網卡上的標識數字和CPU時鐘的唯一的數字生成新的UniqueIdentifier數據 ,這個數據和GUID是一樣的每台計算機能生成全球唯一的值
這樣在多台計算機和多網路之間生成具有唯一性的標識符
優點
使用 Uniqueidentifier數據類型的主要的優點
Uniqueidentifier 數據類型主要的優點是在使用newid函式生成值的時候是可以保證值的全球唯一性
可以唯一的標識單行的記錄 對於多庫(尤其是多機器,多網段的資料庫的複製)來將比IDEntity來的更有效
其次在使用Identity的情況下,我們對自動生成的值是不能修改的,而Uniqueidentifier數據類型是可以隨時修改的
缺點
使用Uniqueidentifier的數據類型的缺點
1 對於生成的Uniqueidentifier 類型的值來講 ,是無序
在正常顯示相關的數據信息的時候,返回的信息是無序的
對於 Identity 為標識的數據顯示的時候,默認的情況下是根據添加記錄的順序來顯示的
這樣,對於uniqueidentifier為主鍵的信息集 ,還是需要一個默認標識排序的欄位。
2 對於Uniqueidentifier 欄位來講,數據的實際信息為16個位元組,相對而言比Identity大的多,相對來講存儲空間和查詢的效率會降低很多。
主鍵
在系統資料庫的設計中我們如何對Uniqueidentifier,Identity ,和可標識的記錄屬性(有實際的含義的信息)作為主鍵 ,這三種方式 進行取捨
以屬性為主鍵的系統設計情況
在系統設計的過程中
單條信息中包含可以表示唯一性的屬性(一般不能太多3個以內)而且這樣的屬性是必填欄位。在記錄生存周期內一般是不進行改動的,表一般多於50個這樣級別的系統
以屬性為主鍵 ,這樣的方式還是最佳的
舉例: 關於學生的管理信息系統以學生的學號為主鍵
以Uniqueidentifier 列為主鍵的情況
在需要多個資料庫之間,多個網段之間需要進行資料庫的複製時,我們就需要在每一個唯一的標識來區別每一個單條記錄,在沒有合適的屬性來做主鍵的情況下可以用Uniqueidentifier列來生成主鍵
以 Identity為主鍵的情況
不需要資料庫的複製,和系統比較小的情況下(50表以內)可以用 Identity列來生成主鍵 ,適合於快速開發。
相關語句
批量隨機生成數據:
DECLARE @MyID uniqueidentifier
DECLARE @INT AS INT
SET @INT = 0
WHILE @INT < 500000 --這裡設定需要插入多少行
BEGIN
SET @INT = @INT + 1
SET @MyID = NEWID()
INSERT INTO testss (testa, testb) SELECT substring(CONVERT(nvarchar(50), @MyID),1,36), ''
END