首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >`REPLACE`和` `INSERT之间有什么实际区别...关于MySQL中的重复密钥更新?

`REPLACE`和` `INSERT之间有什么实际区别...关于MySQL中的重复密钥更新?
EN

Stack Overflow用户
提问于 2012-02-07 07:31:25
回答 5查看 38.4K关注 0票数 90

我需要的是设置具有特定键的记录的所有字段的值(键实际上是复合的),如果还没有具有这样的键的记录,则插入该记录。

REPLACE似乎可以完成这项工作,但同时它的手册页面也建议使用INSERT ... ON DUPLICATE KEY UPDATE

我应该选择哪一种更好?为什么?

我脑海中浮现的REPLACE唯一的“副作用”是它会递增自增量值(幸运的是我没有使用任何值),而INSERT ... ON DUPLICATE KEY UPDATE可能不会。在哪些特殊情况下,REPLACEINSERT ... ON DUPLICATE KEY UPDATE更可取,反之亦然?

EN

回答 5

Stack Overflow用户

发布于 2012-02-07 07:34:35

REPLACE在内部执行delete,然后执行insert。如果有一个外键约束指向该行,这可能会导致问题。在这种情况下,REPLACE可能会失败,甚至更糟:如果您的外键设置为cascade delete,REPLACE将导致其他表中的行被删除。即使在REPLACE操作之前和之后都满足了约束,也可能会发生这种情况。

使用INSERT ... ON DUPLICATE KEY UPDATE可以避免这个问题,因此最好使用它。

票数 126
EN

Stack Overflow用户

发布于 2013-02-27 04:49:18

在使用REPLACE而不是INSERT ... ON DUPLICATE KEY UPDATE时,当多个查询快速到达一个给定的键时,我有时会观察到键锁定或死锁问题。后者的原子性(除了不会导致级联删除)是使用它的更多理由。

票数 12
EN

Stack Overflow用户

发布于 2013-10-24 15:02:21

如果您没有列出所有列,我认为REPLACE会将所有未提及的列重置为替换行中的默认值。ON DUPLICATE KEY UPDATE将保留未提及的列不变。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9168928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档