【数据库】自增ID有什么坏处?什么样的场景下不使用自增ID?

前言

在MySQL中,数据表的主键一般采用id字段自增的形式。使用自增ID给我们带来不少便捷,但也有不少坏处,在一些场景下是不推荐使用自增ID的。

1.什么是自增ID

自增ID是在设计表时将id字段的值设置为自增的形式,这样当插入一行数据时无需指定id会自动根据前一字段的ID值+1进行填充。在MySQL数据库中,可通过sql语句AUTO_INCREMENT来对特定的字段启用自增赋值 使用自增ID作为主键,能够保证字段的原子性.

2.自增ID有什么好处

在添加一行时无需对自增id列赋值,在添加一行数据时可留空,会自动根据前一字段id值+1填充

单个表中能够唯一标识该字段,保证原子性。在单个表中使用自增ID能够保证主键不重复

3.自增ID有什么坏处

不存在连续性,也就是说若表中存有3行数据,ID字段为1,2,3 那么当删除字段2时就变为1,3,不具有连续性

合并表会出现ID重复的情况,上面说个使用自增ID能够在单个表中保证ID字段唯一,但两个表何为1个表,时不具有这种性质的。

4.什么场景下不使用自增ID

正是因为自增ID的缺点也就是无法在多个表中,或者多个数据库中保持ID主键唯一不重复,所以若是使用分布式数据库以及数据合并的情况下时不能使用自增ID的。

若是能够有其他的字段能作为主键保证唯一性,无需使用自增ID

5.自增ID的替代者UUI

UUID含义是通用唯一识别码 (Universally Unique Identifier),指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。换句话说能够在一定的范围内保证主键id的唯一性。

6.UUID存在的目的

UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。也就完美解决的自增ID的缺点。

总结

根据自己项目实际情况来定!!!没有一套规定的方案适合任何一个系统。

更多可参考之前写的文章:分布式唯一 ID 的 8 种生成方案

猜你喜欢

转载自blog.csdn.net/u011397981/article/details/130994014