关于并发的问题:乐观锁和悲观锁

关于并发的问题:乐观锁和悲观锁
1.乐观锁是在代码层做校验通常使用版本号对比的方式,或者使用时间戳(hibernate自带实现通过annotation:@version)
数据库中保存version整数,每次修改的时候获取版本号然后version+1,提交之前获取库里面的version同时
对库里面的version+1和提交的version值对比如果不相等说明被其他线程修改过,返回错误,如果相等更新数据
2.悲观锁是对数据库的数据进行加锁操作,影响性能

注:
sqlserver采用页级锁:采用串行方式等候上一个操作完成以后才进行下一个操作,并发插入影响效率
oracle采用行级锁:只锁定访问的那一行的数据,并发插入不会有影响
mysql不同的引擎支持不同的锁:
页级:引擎 BDB
表级:引擎 MyISAM ,理解为锁住整个表,可以同时读,写不行
行级:引擎 INNODB , 单独的一行记录加锁


√: 可能出现    ×: 不会出现
脏读 不可重复读 幻读
Read uncommitted  √  √
Read committed  ×  √
Repeatable read  × ×  √
Serializable  × ×  ×



http://www.jb51.net/article/50047.htm
http://blog.csdn.net/fg2006/article/details/6937413
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值