【问题标题】:MySQL Prevent Double InsertsMySQL 防止双重插入
【发布时间】:2014-07-14 03:11:08
【问题描述】:

我将每日日志保存在 MySQL 表中。我的应用程序尝试更新表中日期列等于今天的行;如果 UPDATE 不影响任何行,则应用程序知道今天尚未创建行,因此它会插入一个代替。

我试图防止两个不同的线程最终插入一行今天的情况。是否有任何方法可以替代在日期列上设置唯一索引?

我看过像this one 这样的线程,但我不太确定它会起作用 - 将它包装在事务中会阻止另一个线程也插入这一行吗?我假设我真的需要一个隔离级别来防止幻象插入(如可序列化)才能正常工作?

谢谢

【问题讨论】:

    标签: mysql insert locking


    【解决方案1】:

    我做了更多的研究。似乎 InnoDB 事务默认在 REPEATABLE READ 隔离级别下运行,该级别使用next-key locks,应该是prevent the phantom insert problem。所以,我相信只要把它包装在一个事务中,这个问题就应该在 InnoDB 中自动避免......有人可以帮我确认一下吗?

    编辑 - 我看到如果 UPDATE 是一个 SELECT,我们必须使用 shared mode lock。由于这是一个 UPDATE,它是否仍然可以在没有任何额外设置的情况下工作?

    EDIT2 - 为了在这种情况下进行下一个键锁定工作,日期列需要一个索引,对吗?

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 2015-08-07
      • 2016-02-19
      相关资源
      最近更新 更多