mysql先查询后更新 并发

方案一:SELECT FOR UPDATE。SELECT FOR UPDATE 这个语句貌似很适合并发查询并更新的场景,因为它会自动上锁(当使用了索引时是行锁,否则是表锁)。但稍有不慎,很容易造成阻塞。
方案二:应用层分布式锁。可以在应用层使用一个分布式锁(可以放在Memcache中),控制同一时间,只允许一个应用实例进行查询并更新的操作。

方案三:利用数据库的乐观锁

1、增加一个字段,如ver,int值,默认为0
2select ,同时获取ver 值
SELECT user, ver FROM table_b WHERE c=0
3update时检查ver 值是否为第2步获取到的值 (类似于CompareAndSet)
UPDATE table_b SET ver=4,user='xx' WHERE c=0 AND ver=3
如果update的记录数为1,则表示成功;  
如果update的记录数为0,则表示已经被其他应用(线程)update过了,需作异常处理  
        MySQL