如何停止MySQL中的竞争条件?当前的问题是由一个简单的算法引起的:
然后会得到重复的行,或者如果您通过唯一/主键阻止它,则会出现错误。
现在,通常我认为事务在这里有所帮助,但是由于该行不存在,所以事务实际上并没有帮助(或者我是否错过了什么?)。
LOCK TABLE听起来有些矫kill过正,尤其是如果该表每秒更新多次。
我唯一想到的其他解决方案是对每个不同的id使用GET_LOCK(),但是没有更好的方法吗?这里也没有可伸缩性问题吗?而且,为每个表执行此操作听起来有点不自然,因为这对我而言在高并发数据库中听起来是一个非常普遍的问题。
你想要的是锁表
或者,如果这看起来过多,那么通过检查是否已实际插入行来进行INSERT IGNORE。
如果使用IGNORE关键字,则在执行INSERT语句时发生的错误将被视为警告。