乐观锁,悲观锁,数据库操问题

在操作数据库时可能有这样三个问题:
一脏读问题:
二不可重复问题:
三虚读问题:
一,
一个线程去数据库里执行了查询任务,查询数据库(硬盘里一张表的一条信息)
一个线程通过一句Sql语句就能把数据库里的一条信息查询出来或者进行更改,或者再插入一个信息,在这个过程中另外的一个线程也产生了,他仍然要去操作数据库里的信息可能来个线程要修改同一个信息;或者是一个修改一个查询同一条信息;总之两个线程去操作了同一个信息,这样就可能出现问题,一个线程把一个信息刚刚修改,还没有让他提交,令一个线程来把这条记录查询出来,而第一个线程并没有去真正修改。这样第二个线程就得到了一个错误的信心;称之为:脏读问题;
二,
也可能出现这样的问题,一个线程a刚刚查询了一个记录,此时另一个b线程来到,把刚刚的记录修改了,又 一个线程c在去查询时,结果就变了,(这里不管b 线程有没有把这条数据提交C都会得到一条新的记录 ) 这样就出现了不可重复事件,因为你重复就不一样了,
三,
同样,线程a 到数据库里查了一个信息,此时线程B去数据库里插入了一条信息,C线程在去查询时会发现结果多了一条信息。
乐观锁:
如果我把数据库里的一张表里加入了一个字段Version(number)一个线程去修改某个字段(不能是这个字段)时会让这个辅助字段自动加一,当另外一个线程去操作这条信息时 要加入这个字段为条件,因为我在修改这条信息的时候已将version这个自度的内容修改过,其他的线程就不容易在去修改了,、

悲观锁;
一个线程去操作一条信息时,其他线程就不能在去修改,直到他的修改结束,才允许其他线程去修改,
可以用两个javaTest类去作为两个线程,去操作数据库里的信息,先让一个类去修改一条信息,修改结束,令一个类又去修改,这时得到的就是一个新的已经修改过的数据,(属于正常修改!)但是我先把一个信息得到,不去修改,让另一个类去修改了这个信息,然后在让第一个类去操作干菜得到的数据,发现那条记录已经不错在了,不能在修改了,(乐观锁的version已经自动的加一了,会出现异常!)此为乐观锁,
一个线程类去修改了一条信息,就把这个信息锁上,不让其他的线程去操作此线程类操作的正在被操作的信息;只有我能去修改此时其他的都不能去修改!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值