悲观锁和乐观锁的用处和区别?

保证数据安全,处理多用户并发访问。
悲观锁,锁如其名,他对世界是悲观的,他认为别人访问正在改变的数据的概率是很高的,所以从数据开始更改时就将数据锁住,知道更改完成才释放。
乐观锁,他对世界比较乐观,认为别人访问正在改变的数据的概率是很低的,所以直到修改完成准备提交所做的的修改到数据库的时候才会将数据锁住。完成更改后释放。

悲观锁会造成访问数据库时间较长,并发性不好,特别是长事务。
乐观锁在现实中使用得较多,厂商较多采用。

悲观,就是sql上直接锁(select id from table where id=1 for update nowait/wait 3),java捕捉异常,如果没有异常,说明该条记录没有被别的锁着,然后它锁上。如果有异常,说明正被别的锁着,它就不能锁。
乐观,指sql上取得该条记录的更新日时(最好是timestamp型),然后更新语句中,把这个更新日时作为条件加上。如果能被正常更新(更新件数=1)则证明在此期间没有被其他程序更新过,OK。如果不能被正常更新,则证明在此期间被其他程序更新过。

依照AP应用状况,具体分析具体选择使用

你可能感兴趣的:(数据库,悲观锁,乐观锁)