设计程序时,一个事务从加锁到提交,尽可能短的时间,中间不能有交互性操作,否则容易造成冲突。
所以设计程序时,尽量用乐观锁(百度一下)。大概是:第一次读取数据时不加锁,交互性操作后,提交数据时再加锁,然后比较数据库当前值和第一次获取的旧值是否一致,若一致,说明数据在你第一次读取后未修改,否则被人修改,无法提交。
select .* into 旧值 where id=xxx
。。。。交互性操作。。。。
提交时:
start transaction
select * into 当前值 where id=xxx for update
if 旧值<>当前值 then
-- 此记录在你修改的时候,它人已经修改
rollback
end if
update .... set xxx=新值 where id=xxx
commit