如何在MySQL中停止竞争条件?眼前的问题是由一个简单的算法造成的:mysql插入竞争条件
- 从表中选择一行
- ,如果它不存在,将其插入
,然后要么你得到一个重复行,或如果您通过唯一/主键防止出现错误。
现在通常我会觉得这里的交易有所帮助,但由于该行不存在,该交易实际上不利于(或我思念的东西?)。
LOCK TABLE听起来像是一种矫枉过正,尤其是如果表格每秒更新多次。
唯一的其他解决方案,我能想到的是GET_LOCK()为每一个不同的ID,但是是不是有更好的办法?这里也没有可扩展性问题吗?而且,为每个表做这件事听起来有点不自然,因为这听起来像是高并发性数据库中一个非常常见的问题。
使用INSERT IGNORE进行操作。触发器会导致太多开销,除非业务逻辑复杂,否则它们是不值得的。 – captainspi 2013-06-08 21:30:03
只是`INSERT`有什么问题,并且有唯一的约束和捕捉错误来说“好吧,记录已经存在”。 – KeatsKelleher 2014-05-22 14:03:11