REPLACE INTO 为什么返回”2 rows affected”
这篇讲的是当使用 `REPLACE INTO` 插入数据时,为何有时会看到“2 rows affected”的返回结果,以及这背后可能隐藏的坑。作者从这个常见的困惑现象切入,深入解释了 `REPLACE INTO` 的实际执行逻辑:它并非总是简单插入,当主键或唯一索引发生冲突时,MySQL 会先执行 `DELETE` 再执行 `INSERT`。因此,“2 rows affected”通常意味着原有一行数据被删除,然后插入了一行新数据,总计影响了两行。 文章还进一步对比了 `REPLACE INTO` 与 `INSERT ... ON DUPLICATE KEY UPDATE` 这两种“存在即更新”方案的差异。作者指出,如果表上定义了多个唯一索引,且插入的数据行同时与多条现有记录冲突,`REPLACE INTO` 的行为会变得更加不可预测(它会删除所有冲突行),而 `ON DUPLICATE KEY UPDATE` 则能精确更新所冲突的行。 通过清晰的分析和对比,文章最终澄清了这个“2 rows affected”的真相,帮助开发者更安全、更精准地选择使用哪种数据插入或更新策略,避免因误解行为而导致数据意外丢失。