您的位置:首页 > 其它

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

2016-06-30 18:37 218 查看
关于并发的问题:乐观锁和悲观锁
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: