清空表数据后,新增数据id不是自增不是从1开始

        在学习过程中发现,数据库中给表设置id为自增时,向表中中添加一些数据后。需要把表数据清空,但是在清空后再向表中插入数据发现表中的id不是从1开始自增而是接着之前的数据进行id自增。

TRUNCATE TABLE 表名

### MySQL主键使用方法 在MySQL中,`AUTO_INCREMENT`属性用于定义自字段。通常情况下,该字段作为的主键来确保每一条记录都有唯一的标识符。当向中插入新行而没有显式指定此字段的值时,MySQL会自动分配下一个可用的最大整数值给这一字段。 #### 创建带有自主键的格 要创建具有自特性的主键,可以在建语句中声明某一列为 `INT NOT NULL AUTO_INCREMENT PRIMARY KEY` 或者单独设置某列为主键并赋予其 `AUTO_INCREMENT` 属性: ```sql CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), age INT, PRIMARY KEY (id) ); ``` 上述命令将会建立一张名为 `example` 的,并设定其中的 `id` 列为自主键[^1]。 ### 解决自主键不连续的问题 有时由于事务回滚、删除操作或其他原因,可能会观察到自序列出现了间断现象。对于这种情况,虽然不影响系统的正常运行,但从美观性和逻辑上可能不太理想。以下是几种处理方案: - **忽略间隙**:如果应用程序并不依赖于ID之间的连续性,则可以选择接受这种自然形成的间隔。 - **重置计数器**:可以通过TRUNCATE TABLE命令清空整个并将自值重新设为初始状态;不过需要注意的是这样做会导致现有数据丢失,因此只适用于测试环境或特定场景下重建结构之后的操作。 - **调整配置参数**: - 对于InnoDB存储引擎,默认情况下会在多版本并发控制(MVCC)模式下预留一定范围内的编号以防冲突。通过修改全局变量 `innodb_autoinc_lock_mode` 可以改变锁定行为从而减少不必要的跳号问题[^4]。 - 设置 `auto_increment_offset` 和 `auto_increment_increment` 参数也可以用来定制起始位置以及量步长,这对于分布式部署或多实例同步很有帮助[^3]。 另外值得注意的一点是,在某些框架如 MyBatis Plus 中进行新增操作时,若实体类里已经包含了 ID 值(即使为空),则有可能干扰到数据库层面的自动生成机制,进而造成预期之外的结果。此时应确保传入的对象不含任何预赋值的主键信息除非确实需要覆盖默认行为[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值