数据库规定主键值不能重用的目的是啥

关系型数据库中并没有规定主键值不能重用,只要主键列中所有的值都是唯一且不为空的就可以了。我猜想题主说的可能是 SQL Server 中的 “自动增长列”(标识列 / identity 列)?既然是 “自动增长”,那当然是不能再 “减少” 的了,呵呵,否则怎么能叫这个名字呢?好吧,说正经的,我觉得应该是实现起来比较简单,只要记录当时该列中最大的值且加上一个步长(默认为1)就可以了,否则还得花费时间去搜索那个 “空隙”。尤其是在并发的情况下,比较容易保证新插入的记录中这一列的值是正确的。设置为 “标识列” 的缺点就是,这一列的值只能是整型。另外,只要这一列的值都是整型,那么对于计算机来说占用的存储空间都是一样的,并没有 “浪费资源”。
■网友
1.主键值可以重用。2.在很多已有的系统中,比如各种开源网站、论坛,由于数据库在设计时,业务与主键值耦合了,这种情况下,重用主键值会让系统发生业务错误。比如某查询是以主键是否存在来判定查询结果,重用主键会造成误判。3.对于自增主键,主键值也可以重用,但问题是,如何重用?你会发现这非常麻烦。
■网友
1、数据库没有规定主键不能重用。
【数据库规定主键值不能重用的目的是啥】 2、说主键不能重用,应该是业务场景规定。因为主键经常会写到其他表做关联,如果你主表删了从表没删,重用的时候又没检测从表是否存在的话,那么从表就会关联上新的数据,这就会出问题。然而主键一般是UUID或者自增的,想要重用也没那么容易啦。


    推荐阅读