自增主键不连续

文章讨论了数据库中使用insert语句时自增ID的分配情况,包括ignore选项、ONDUPLICATEKEYUPDATE规则以及批量插入时ID的连续性。当不提供ID或使用特定插入模式时,自增ID如何处理和分配是关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.insert语句会分配连续id,但是没有入进去的也会分配id,致使自增主键不连续。如ignore, INSERT … ON DUPLICATE KEY UPDATE
2.Simple inserts 批量入库的时候,不论顺序,入进去的数据id从自增id开始连续,没有入进去的数据随后占据自增id。
3.入库数据只要不带id,不管是否入进库里,有多少条 数据就会新生成多少条id. 如果入库数据带有id,不论insert_many还是insert_update_many还是insert ignore 都不会新生成自增id.
4.删掉目标表id, insert_update_many此id,不会生成新自增id.

### MySQL INSERT IGNORE 的用法与行为 #### 插入数据时忽略错误 `INSERT IGNORE` 语句的功能是在执行插入操作时,如果遇到某些特定的错误(如主键冲突或唯一索引冲突),则忽略这些错误并继续执行其余的插入操作[^4]。这使得 `INSERT IGNORE` 成为一种高效的方式,用于在需要更新现有记录的情况下批量插入新数据。 #### 示例:忽略重复键错误 假设有一个名为 `users` 的表,其中包含 `id` 和 `name` 两列,并且 `id` 是主键。下面的示例演示如何使用 `INSERT IGNORE` 插入数据,同时忽略重复键错误。 ```sql INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob'), (1, 'Charlie'); ``` 在此示例中,如果 `id = 1` 已经存在于表中,则该行的插入会被忽略,而会引发错误[^4]。 #### 忽略的错误类型 `INSERT IGNORE` 主要用于忽略以下类型的错误: - 主键冲突。 - 唯一索引冲突。 - 数据截断警告(例如插入超出列定义长度的数据)。 需要注意的是,虽然这些错误被忽略,但其他类型的错误(如语法错误或权限问题)仍然会导致整个语句失败。 #### 示例:结合 SELECT 使用 可以将 `INSERT IGNORE` 与 `SELECT` 结合使用,以从一个表中选择数据并插入到另一个表中,同时忽略可能的冲突。 ```sql INSERT IGNORE INTO target_table (column1, column2) SELECT column1, column2 FROM source_table; ``` 上述代码将从 `source_table` 中选择数据并插入到 `target_table` 中,如果目标表中存在重复的主键或唯一索引值,则相应的行会被忽略。 #### 性能考虑 尽管 `INSERT IGNORE` 提供了一种简单的方式来处理重复数据,但在高并发场景下,可能会导致性能下降。这是因为每次插入都需要检查是否存在冲突。为了优化性能,建议在设计数据库时尽量减少重复数据的可能性,或者使用其他方法(如 `REPLACE INTO` 或 `ON DUPLICATE KEY UPDATE`)来处理冲突[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值