方法二: 判定不要直接使用for update,我习惯这样使用: SELECT count(1) into COUNTER FROM test WHERE id=<关键字> FOR UPDATE NO WAIT SKIP LOCKED; 此时你可以获取COUNTER的值是否为0,如果为0代表正在操作,这个怎么操作就你自己决定了,让记得ROLLBACK和COMMIT。。。。。 付:FOR UPDATE NO WAIT SKIP LOCKED该SQL或根据查询条件并跳过被锁住的行,所以如果被锁住了,就不会得到结果,当然COUNTER就为0了,如果得到值,说明你要操作的数据还没有被加锁,此时可以继续操作那条数据了,因为这个线程获取到了这个锁。。。
还有就是UPDATE的时候应当以当前值进行修改,如 UPDATE test set num = num - <卖掉的数量> WHERE id = <关键字>;