INSERT ... ON DUPLICATE KEY UPDATE 究竟是原子的吗?

5

我进行了一些搜索,但没有找到明确的答案。它是原子的吗?也就是说,它要么进行INSERT操作,要么进行UPDATE操作,否则就会抛出错误?如果是,那么这与使用TRANSACTION有何不同?或者,在我从自己的应用程序访问数据库时,是否需要使用某种条件以及某种查询函数/方法?


"atomic" 只有一个意义。你的问题并不涉及任何内容。 - user207421
@EJP,我非常尊重您,但我的问题是关于消除疑虑的。我还问了一些关于事务和在编程语言中实现相同逻辑的其他问题,以及这三件事是否等价。因此,我认为我的问题是有意义的。 - kzidane
1个回答

2

MySQL文档

根据定义,原子性要求每个事务都是全有或全无的。因此,如果您尝试插入的数据将导致主键或唯一索引中出现重复,该语句将执行更新而不会出错,因此在这个意义上它是具有原子性的。我认为适当的术语是upsert(即update/insert)。

但就个人而言,我认为它更加注重一致性(ACID原则中的C),因为这确保了数据库处于有效状态(没有违反主键或唯一约束)。

至于事务,是有所不同的。它没有回滚,只会执行插入或更新操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接