如何在 MySQL 中停止竞争条件?手头的问题是由一个简单的算法引起的:
- 从表中选择一行
- 如果不存在,则插入
然后要么你得到一个重复的行,要么你通过唯一/主键阻止它,一个错误。
现在通常我认为事务在这里有帮助,但由于该行不存在,事务实际上并没有帮助(或者我错过了什么?)。
LOCK TABLE 听起来有点矫枉过正,尤其是在表每秒更新多次的情况下。
我能想到的唯一其他解决方案是 GET_LOCK() 用于每个不同的 id,但没有更好的方法吗?这里也没有可扩展性问题吗?而且,对每个表都这样做听起来有点不自然,因为对我来说这听起来像是高并发数据库中非常常见的问题。