日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談如何屏蔽數(shù)據(jù)庫中自增ID功能

在平時的項目開發(fā)中,我相信有很大一批人都在用這個數(shù)據(jù)庫自增ID,用數(shù)據(jù)庫自增ID有利也有弊。

創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)麻陽,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

優(yōu)點:節(jié)省時間,根本不用考慮怎么來標(biāo)識***記錄,寫程序也簡單了,數(shù)據(jù)庫幫我們維護(hù)著這一批ID號。

缺點:for example, 在做分布式數(shù)據(jù)庫時,要求數(shù)據(jù)同步時,這種自增ID就會出現(xiàn)嚴(yán)重的問題,因為你無法用該ID來***標(biāo)識記錄。同時在數(shù)據(jù)庫做移植時,也會出現(xiàn)各種問題,總之,對此自增ID有依賴的情況,都有可能出現(xiàn)問題。我絕對相信園子里有很一部分人都被這個“好用的東西” 曾經(jīng)害慘過!

我平時在開發(fā)項目的時候,一般都沒有用到數(shù)據(jù)庫的自增ID, 所以我想分享一下自己的解決方法。

解決思路

1:定義一張表,專門用來存放存所有需要***ID的表名稱以及該表當(dāng)前所使用到的ID值。

2: 寫一個存儲過程,專門用來在上一步的表中取ID值。

這個思路非常簡單,我不作解釋了,直接來看看我的實現(xiàn)方法:

***步:創(chuàng)建表

 
 
 
  1. create table table_key  
  2. (  
  3.  table_name   varchar(50) not null primary key,  
  4.        key_value    int         not null 

第二步:創(chuàng)建存儲過程來取自增ID

 
 
 
  1. create procedure up_get_table_key  
  2. (  
  3.    @table_name     varchar(50),  
  4.    @key_value      int output 
  5. )  
  6. as 
  7. begin 
  8.      begin tran  
  9.          declare @key  int 
  10.            
  11.          --initialize the key with 1  
  12.          set @key=1  
  13.          --whether the specified table is exist  
  14.   if not exists(select table_name from table_key where table_name=@table_name)  
  15.             begin 
  16.     insert into table_key values(@table_name,@key)        --default key vlaue:1  
  17.             end 
  18.          -- step increase  
  19.          else      
  20.             begin 
  21. select @key=key_value from table_key with (nolock) where table_name=@table_name  
  22.                 set @key=@key+1  
  23.                 --update the key value by table name  
  24.           update table_key set key_value=@key where table_name=@table_name  
  25.             end 
  26.         --set ouput value  
  27.     set @key_value=@key 
  28.  
  29.     --commit tran  
  30.     commit tran  
  31.         if @@error>0  
  32.       rollback tran  
  33. end 

對于在表中不存在記錄,直接返回一個默認(rèn)值為1的鍵值,同時插入該條記錄到table_key表中。而對于已存在的記錄,key值直接在原來的key基礎(chǔ)上加1.

總結(jié)一下,這種方法非常簡單,我說一下它的優(yōu)缺點。

優(yōu)點:

1:ID值是可控的。用戶可以從指定段開始分配ID值,這對于在分布式數(shù)據(jù)要求同數(shù)據(jù)同步時,非常方便,很好地解決了ID重復(fù)的問題。

2:在編寫程序中,ID值是可見的,比如在再插入關(guān)聯(lián)的記錄時,相比使用數(shù)據(jù)庫自增ID的情況下,這種方法不需要在插入一條數(shù)據(jù)庫記錄之后,再去得到自增ID值,然再再使用該ID的值來插入關(guān)聯(lián)的記錄。我們可以一次性使用事務(wù)來插入關(guān)聯(lián)記錄。

3:對于需要批量插入數(shù)據(jù)時,我們可以改寫一下上面的存儲過程,返回一個段的開始ID,然后更新表時需要注意,不是原來的簡單的遞增1,而是遞增你想要的插入多少條記錄的總數(shù)。

缺點:

1:效率問題,每次取ID值都需要調(diào)用存儲過程從數(shù)據(jù)庫中檢索一次。對于這種情況,我覺得效率不是很大問題,因為SQL server 會對我們經(jīng)常調(diào)用的存儲過程有緩存,再一點,這個表的數(shù)據(jù)應(yīng)該不會很大,最多上千條(一個項目中上千個表的情況應(yīng)該不是很多吧)。所以檢索不是什么問題,何況是根據(jù)表名來檢索(表名列已是主鍵)。


文章題目:淺談如何屏蔽數(shù)據(jù)庫中自增ID功能
文章鏈接:http://www.dlmjj.cn/article/djhpgce.html