究竟INSERT ... ON DUPLICATE KEY UPDATE原子?

时间:2014-12-18 10:37:02

标签: mysql atomicity

我做了一些搜索,但未能找到明确的答案。它在INSERT,UPDATE或抛出错误的意义上是原子的吗?如果是,那是否与使用TRANSACTIONs有什么不同,或者,如果我从我自己的应用程序访问数据库,某种条件以及某种查询功能/方法?

1 个答案:

答案 0 :(得分:0)

MySQL Docs

根据定义,原子性要求每个事务都是全部或全部。所以是的,在某种意义上它是原子的,如果您尝试插入的数据将导致主键或唯一索引中的重复,则该语句将执行更新而不是错误输出。我认为正确的术语是upsert(更新/插入)。

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

transactions而言,是的,它是不同的。没有回滚,无论是插入还是更新都将完成。