自動編號主鍵與GUID主鍵詳解

2021-06-19 13:48:50 字數 1228 閱讀 3209

這種方法也是很多朋友在使用的,就是新建乙個id欄位,自動增長,非常方便也滿足主鍵的原則,優點是:資料庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對於檢索非常有利;數字型的,占用空間小,易排序,在程式中傳遞也方便;如果通過非系統增加記錄(比如手動錄入,或是用其他工具直接在表裡插入新記錄,或老系統資料匯入)時,非常方便,不用擔心主鍵重複問題。 

缺點:其實缺點也就是來自其優點,就是因為自動增長,在手動要插入指定id的記錄時會顯得麻煩,尤其是當系統與其他系統整合時,需要資料匯入時,很難保證原系統的id不發生主鍵衝突(前提是老系統也是數字型的);如果其他系統主鍵不是數字型那就麻煩更大了,會導致修改主鍵資料型別了,這也會導致其他相關表的修改,後果同樣很嚴重;就算其他系統也是數字型的,在匯入時,為了區分新老資料,可能想在老資料主鍵前統一加乙個「o」(old)來表示這是老資料,那麼自動增長的數字型又面臨乙個挑戰。

目前乙個比較好的主鍵是採用guid,當然我是推薦主鍵還是字元型的,但值由guid生成,guid是可以自動生成,也可以程式生成,而且鍵值不可能重複,可以解決系統整合問題,幾個系統的guid值導到一起時,也不會發生重複,就算有「o」老資料也可以區分,而且效率很高,在.net裡可以直接使用system.guid.newguid()進行生成,在sql裡也可以使用 newid()生成。

優點是:

同 identity 列相比,uniqueidentifier 列可以通過 newid() 函式提前得知新增加的行 id,為應用程式的後續處理提供了很大方便。

便於資料庫移植,其它資料庫中並不一定具有 

identity 

列,而 

guid 

列可以作為字元型列轉換到其它資料庫中,同時將應用程式中產生的 

guid 

值存入資料庫,它不會對原有資料帶來影響。

便於資料庫初始化,如果應用程式要載入一些初始資料, identity 列的處理方式就比較麻煩,而 uniqueidentifier 列則無需任何處理,直接用 t-sql 載入即可。

便於對某些物件或常量進行永久標識,如類的 classid,物件的例項標識,uddi 中的聯絡人、服務介面、tmodel標識定義等。 

缺點是: 

guid 值較長,不容易記憶和輸入,而且這個值是隨機、無順序的 

guid 的值有 16 個位元組,與其它那些諸如 4 位元組的整數相比要相對大一些。這意味著如果在資料庫中使用 uniqueidentifier 鍵,可能會帶來兩方面的消極影響:儲存空間增大;索引時間較慢。

SQL 主鍵 自動編號 主鍵自增

1.新建一資料表,裡面有欄位id,將id設為為主鍵 如下 create table tb id int,constraint pkid primary key id create table tb id int primary key 2.新建一資料表,裡面有欄位id,將id設為主鍵且自動編號 如下...

ms sql 主鍵自動生成32位guid

因同步資料業務需要,主鍵被設定為varchar 32 而自動生成的newid 是36位的,需要將中間的橫線去掉,才合適。為此寫如下標量函式 create function get 32guid id uniqueidentifier returns varchar 32 asbegin return...

mysql組合主鍵 MySQL自動編號與主鍵

1 自動編號 auto increment 必須與主鍵組合使用 預設情況下,起始值為1,增量也為1。2 主鍵 primary key 每張資料表只能存在乙個主鍵 主鍵保證記錄的唯一性 主鍵自動為not null 3 auto increment必須與主鍵一起使用,主鍵不一定必須與auto incre...