您好,欢迎访问一九零五行业门户网

数据库排它操作(2)

续: 排它操作不仅仅 for update 就可以,它还需要一个更新标志。 举个例子: 要 更新数据表table表,表中字段id为主键。然后a进行了如下操作 select id from table where * for update update table set * where id=*; a先锁了符合条件的数据,然后进行了更
续:
排它操作不仅仅 for update 就可以,它还需要一个更新标志。
举个例子:
要 更新数据表table表,表中字段id为主键。然后a进行了如下操作
select id from table where * for update
update table set * where id=*;
a先锁了符合条件的数据,然后进行了更新操作,之后是commit之类的。
问题来了:
time1时刻,a了解到数据库table表id=1的列不符合状况,他在time2时刻准备执行上面的操作进行修改; 但是b也查到了这个状况,却在time1.5的时刻完成了table的更改;这时候a修改的就是b改过后的数据。
解决:
需要一个参照标志,假设为upd字段。
a要修改表中id=1的数据,需要先进行查询id=1数据对于的upd字段的值;
select upd from table where id=1
假设查找的upd值为 vals=2014/11/14 1:04;
select id from table where id=1 and upd=vals for update
之后进行更新操作就没有问题了。
其它类似信息

推荐信息