資料表主健通常採用以下三種方式:
1.自動遞增值。
2.唯一名稱。這個是使用自己定義的演算法來生成乙個唯一序列號。
3.guid
(全域性唯一識別符號)。
在客戶端生成,由
guid
的特性決定,通過
guid
生成的值可能出現重複的機會幾乎等於零,因此保證在插入表的時候主鍵值唯一。
可以方便處理分布式資料的提交,比如:分店資料向總店提交――直接將該部分資料插入即可。
在資料庫伺服器端生成,由於該值是由資料庫系統內部處理的,亦保證其唯一性,但由於其是在資料庫伺服器端生成,因此必須將該值返回客戶端,客戶端通過該值過行其它操作。比如一張單據(主從表)是使用自動遞增值,當插入單據抬頭後,必須將單據抬頭的關鍵字段值返回,再插入單據明細(單據明細是通過單據抬頭關鍵字段進行關聯的)。
不能很好處理分布式資料的提交,比如:分店資料向總店提交――提交資料時必須重新生成該資料表的關鍵字段值,以保證該字段值唯一。
要支援離線資料處理需要進行額外的處理,對本地資料報進行儲存記錄(儲存到本地)時需要插入乙個假設唯一值,在提交離線資料回資料伺服器時再重新生成真正的唯一值,並重新進行相關的處理。
在客戶端生成或在服務端生成,相對於自動遞增值不同的地方就是自己維護生成唯一值的演算法及所儲存的臨時值,容易造成出錯或其它問題。如果是在客戶端生成唯一值的話,還必須保證所生成的值是唯一的。
不能很好處理分布式資料的提交,比如:分店資料向總店提交――提交資料時必須重新生成(或預先處理)該資料表的關鍵字段值,以保證該字段值唯一
要支援離線資料處理需要進行額外的處理,對本地資料報進行儲存記錄(儲存到本地)時需要插入乙個假設唯一值,在提交離線資料回資料伺服器時再重新生成真正的唯一值,並重新進行相關的處理。
下面以乙個新增單據儲存比較
guid
與自動遞增值/唯一名稱的差別
動作
guid
自動遞增值/唯一名稱
單據抬頭
新增單據抬頭關鍵字段值:獲取並填寫
單據抬頭關鍵字段值:無
儲存直接儲存
首先獲取並填寫關鍵字段值,然後再進行儲存
返回直接返回
返回時必須將關鍵字段值返回
單據明細
新增關聯單據抬頭字段值:直接填寫
單據明細關鍵字段值:獲取並填寫
關聯單據抬頭字段值:無
單據明細關鍵字段值:無
儲存直接儲存
獲取單據抬頭關鍵字段值並填寫到單據明細的關聯單據抬頭字段中;
然後獲取並填寫單據明細關鍵字段值;
再進行儲存
綜合以上所述,用
guid
作為資料表的關鍵字段值是可以減輕關鍵字段相關的操作的,並且是最直接實用的方法。
MySql資料庫自動遞增值問題
create table test id int unsigned not null primary key auto increment,username varchar 15 not null auto increment 100 在資料庫應用,我們經常要用到唯一編號,以標識記錄。在mysql中...
Oracle自動增值
oracle自動增值,乙個很好的例子 摘自 1.建立使用者名稱表 create table users userid int primary key,使用者id號 username varchar 20 使用者名稱 passwd varchar 20 email varchar 30 grade i...
自動編號主鍵與GUID主鍵詳解
這種方法也是很多朋友在使用的,就是新建乙個id欄位,自動增長,非常方便也滿足主鍵的原則,優點是 資料庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對於檢索非常有利 數字型的,占用空間小,易排序,在程式中傳遞也方便 如果通過非系統增加記錄 比如手動錄入,或是用其他工具直接在表裡插入新記錄,...