【问题标题】:How exactly is INSERT ... ON DUPLICATE KEY UPDATE atomic?INSERT ... ON DUPLICATE KEY UPDATE 究竟是如何原子的?
【发布时间】:2015-02-17 02:52:42
【问题描述】:

我进行了一些搜索,但无法找到明确的答案。它在某种意义上是原子的,它要么插入、更新,要么抛出错误?如果是,这与使用 TRANSACTION 有什么不同,或者,如果我从自己的应用程序访问数据库,某种条件以及某种查询函数/方法?

【问题讨论】:

  • “原子”只有一种感觉。您的问题与任何事情无关。
  • @EJP 尊重,但我的问题是关于清除我的疑虑。我还问了其他几个关于事务和在编程语言中实现相同逻辑的问题,以及这三件事是否等价。所以我认为我的问题是关于某事的。

标签: mysql atomic


【解决方案1】:

MySQL Docs

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

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

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

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 2013-10-03
    • 2015-07-30
    • 2011-02-12
    • 1970-01-01
    • 2011-01-29
    • 2017-04-24
    • 2011-08-09
    相关资源
    最近更新 更多