mysql不使用自增_自增ID有什么坏处?什么样的场景下不使用自增ID?

大家好,我是IT修真院上海分院第3期学员,一枚正直善良的java程序员,今天给大家分享一下,修真院java任务中的一个知识点:自增ID有什么坏处?什么样的场景下不使用自增ID?

1.背景

对于MySQL中表的主键一般采用id字段自增的形式,不过自增id存在一些问题,在一些场景下是不推荐使用自增ID的。

2.什么是自增ID

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

3.自增ID有什么好处

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

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

4.自增ID有什么坏处

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

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

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

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

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

6.自增ID的替代者UUI

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

7.UUID存在的目的

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

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:16318412,或者你可以直接点击此链接:http://www.jnshu.com/login/1/16318412

作者:Himly

PPT地址:PPT

自增ID有什么坏处?什么样的场景下不使用自增ID?_腾讯视频

### MySQL字段初始值过大的原因 MySQL 中 `AUTO_INCREMENT` 字段的初始值可能变得非常大,主要原因可以归纳为以下几个方面: - **数据迁移**:在将其他数据库的数据迁移到 MySQL 时,如果源数据库中的自字段已经达到了较大的数值,则目标表的 `AUTO_INCREMENT` 值会被设置为对应的最大值加一[^1]。 - **手动设置**:开发人员为了满足某些特殊业务需求,可能会通过 SQL 显式地调整 `AUTO_INCREMENT` 的初始值。例如,在创建表时指定较大的初始值或者通过 `ALTER TABLE` 修改现有表的自属性[^4]。 - **数据表重建**:当重新构建一张表并希望保留原有数据结构及其特性时,新的表会继承原表最后使用的 `AUTO_INCREMENT` 值,这可能导致初始值较大[^1]。 #### 设置方法 对于需要调整或初始化 `AUTO_INCREMENT` 值的情况,有多种方式实现这一操作: - 使用 `ALTER TABLE` 语句来更改已存在表的自起点。例如: ```sql ALTER TABLE table_name AUTO_INCREMENT = desired_value; ``` 这里的 `desired_value` 即为目标初始值[^3]。 - 创建新表时直接设定 `AUTO_INCREMENT` 属性。如下所示的例子展示了如何定义一个新的表并将它的 `AUTO_INCREMENT` 起始点设为 100: ```sql CREATE TABLE example_table ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8; ``` 此外还可以利用全局变量控制量行为,比如通过修改 `@@auto_increment_offset` 和 `@@auto_increment_increment` 来影响多个服务器实例间的同步机制[^2]。 ### 总结 综上所述,MySQL 表中 `AUTO_INCREMENT` 初始值变大的现象主要源于实际应用过程中的各种因素作用所致;而针对场景下的具体需求则提供了灵活多样的解决方案供使用者选择实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值