如何屏蔽数据库中自增ID功能

62次阅读
没有评论

共计 1597 个字符,预计需要花费 4 分钟才能阅读完成。

今天就跟大家聊聊有关如何屏蔽数据库中自增 ID 功能,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在平时的项目开发中,我相信有很大一批人都在用这个数据库自增 ID,用数据库自增 ID 有利也有弊。平时在开发项目的时候,一般都没有用到数据库的自增 ID。下面丸趣 TV 丸趣 TV 小编来讲解下如何屏蔽数据库中自增 ID 功能?

如何屏蔽数据库中自增 ID 功能

解决思路

1: 定义一张表,专门用来存放存所有需要唯一 ID 的表名称以及该表当前所使用到的 ID 值。

2: 写一个存储过程,专门用来在上一步的表中取 ID 值。

这个思路非常简单,我不作解释了,直接来看看我的实现方法:

第一步:创建表

createtabletable_key(table_namevarchar(50)notnullprimarykey,key_valueintnotnull)

第二步:创建存储过程来取自增 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

对于在表中不存在记录,直接返回一个默认值为 1 的键值,同时插入该条记录到 table_key 表中。而对于已存在的记录,key 值直接在原来的 key 基础上加 1.

如何屏蔽数据库中自增 ID 功能

总结一下,这种方法非常简单,我说一下它的优缺点。

优点:

1:ID 值是可控的。用户可以从指定段开始分配 ID 值,这对于在分布式数据要求同数据同步时,非常方便,很好地解决了 ID 重复的问题。

2:在编写程序中,ID 值是可见的,比如在再插入关联的记录时,相比使用数据库自增 ID 的情况下,这种方法不需要在插入一条数据库记录之后,再去得到自增 ID 值,然再再使用该 ID 的值来插入关联的记录。我们可以一次性使用事务来插入关联记录。

3:对于需要批量插入数据时,我们可以改写一下上面的存储过程,返回一个段的开始 ID,然后更新表时需要注意,不是原来的简单的递增 1,而是递增你想要的插入多少条记录的总数。

缺点:

1:效率问题,每次取 ID 值都需要调用存储过程从数据库中检索一次。对于这种情况,我觉得效率不是很大问题,因为 SQLserver 会对我们经常调用的存储过程有缓存,再一点,这个表的数据应该不会很大,最多上千条 (一个项目中上千个表的情况应该不是很多吧)。所以检索不是什么问题,何况是根据表名来检索 (表名列已是主键)。

看完上述内容,你们对如何屏蔽数据库中自增 ID 功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1597字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)