如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能

今天就跟大家聊聊有關(guān)如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都OPP膠袋等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷(xiāo)售的產(chǎn)品,結(jié)合品牌形象的塑造,量身策劃品質(zhì)網(wǎng)站。

在平時(shí)的項(xiàng)目開(kāi)發(fā)中,我相信有很大一批人都在用這個(gè)數(shù)據(jù)庫(kù)自增ID,用數(shù)據(jù)庫(kù)自增ID有利也有弊。平時(shí)在開(kāi)發(fā)項(xiàng)目的時(shí)候,一般都沒(méi)有用到數(shù)據(jù)庫(kù)的自增ID。下面創(chuàng)新互聯(lián)小編來(lái)講解下如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能?

如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能

解決思路

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

2:寫(xiě)一個(gè)存儲(chǔ)過(guò)程,專門(mén)用來(lái)在上一步的表中取ID值。

這個(gè)思路非常簡(jiǎn)單,我不作解釋了,直接來(lái)看看我的實(shí)現(xiàn)方法:

第一步:創(chuàng)建表

createtabletable_key(table_namevarchar(50)notnullprimarykey,key_valueintnotnull)

第二步:創(chuàng)建存儲(chǔ)過(guò)程來(lái)取自增ID

createprocedureup_get_table_key(@table_namevarchar(50),@key_valueintoutput)asbeginbegintrandeclare@keyint--initializethekeywith2set@key=1--whetherthespecifiedtableisexistifnotexists(selecttable_namefromtable_keywheretable_name=@table_name)begininsertintotable_keyvalues(@table_name,@key)--defaultkeyvlaue:1end--stepincreaseelsebeginselect@key=key_valuefromtable_keywith(nolock)wheretable_name=@table_nameset@key=@key+1--updatethekeyvaluebytablenameupdatetable_keysetkey_value=@keywheretable_name=@table_nameend--setouputvalueset@key_value=@key--committrancommittranif@@error>0rollbacktranend

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

如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能

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

優(yōu)點(diǎn):

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

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

3:對(duì)于需要批量插入數(shù)據(jù)時(shí),我們可以改寫(xiě)一下上面的存儲(chǔ)過(guò)程,返回一個(gè)段的開(kāi)始ID,然后更新表時(shí)需要注意,不是原來(lái)的簡(jiǎn)單的遞增1,而是遞增你想要的插入多少條記錄的總數(shù)。

缺點(diǎn):

1:效率問(wèn)題,每次取ID值都需要調(diào)用存儲(chǔ)過(guò)程從數(shù)據(jù)庫(kù)中檢索一次。對(duì)于這種情況,我覺(jué)得效率不是很大問(wèn)題,因?yàn)镾QLserver會(huì)對(duì)我們經(jīng)常調(diào)用的存儲(chǔ)過(guò)程有緩存,再一點(diǎn),這個(gè)表的數(shù)據(jù)應(yīng)該不會(huì)很大,最多上千條(一個(gè)項(xiàng)目中上千個(gè)表的情況應(yīng)該不是很多吧)。所以檢索不是什么問(wèn)題,何況是根據(jù)表名來(lái)檢索(表名列已是主鍵)。

看完上述內(nèi)容,你們對(duì)如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文標(biāo)題:如何屏蔽數(shù)據(jù)庫(kù)中自增ID功能
當(dāng)前鏈接:http://muchs.cn/article26/jejijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)網(wǎng)站改版、App設(shè)計(jì)、靜態(tài)網(wǎng)站、建站公司、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司