tpk*_*tpk 11 mysql locking transactions race-condition
你如何在MySQL中阻止竞争条件?手头的问题是由一个简单的算法引起的:
然后要么获得重复的行,要么通过唯一/主键阻止它,这是一个错误.
现在通常我认为事务在这里有帮助,但因为行不存在,事务实际上没有帮助(或者我错过了什么?).
LOCK TABLE听起来有点过分,特别是如果表每秒更新多次.
我能想到的唯一其他解决方案是GET_LOCK()用于每个不同的id,但是没有更好的方法吗?这里也没有可扩展性问题吗?而且,为每个表执行此操作听起来有点不自然,因为它听起来像是高并发数据库中一个非常常见的问题.
Ken*_*Ken 10
你想要的是LOCK TABLES
或者,如果看起来过多,请检查INSERT IGNORE是否实际插入了行.
如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告.