解决数据库并发下的脏数据的思考
一般解决数据库脏数据的问题,常常用到乐观锁和悲观锁。
乐观锁是在我取出数据进行操作前获取到当前一个时间戳,当更新的时候在对比下时间戳。如果时间戳相同则更新,否则不更新。
悲观锁则是在取出数据的时候将这条数据加锁,其他要获取操作这条数据的动作要等到释放锁之后才能操作。
最近接触到另外一种方式: 那就是将你要操作的数据取出来后在更新的时候将操作前的数据放到where后面去,这样也可以防止你在操作的时候其他人已经更新了数据。
例如
select ID, Name, age, sex, salar from emp
如果你要将1ID对于的Salar改为100,你在取出来的时候是50,那么你在where中加上salar之前的值。
update emp set salar = 100 where salar = 50 and ID=1
这个只是一个可性的办法,但是还是有一些问题,不过局部还是可以用的。