悲观锁和乐观锁的理解
来源:互联网 发布:javascript高级编程 编辑:程序博客网 时间:2024/05/22 07:50
查了一下悲观锁和乐观锁的目的主要是为了避免脏读,看起来和oracle的默认隔离级别READ-COMMITED是冲突的。因为READ-COMMITED是可以避免脏读的。
细想一下,果然有问题。请看脏读的定义:
T1修改了记录,还没有提交,T2读取了该记录,T1回滚了修改。
READ-COMMITED能够防止当前事务读取之前事务正在修改的数据,但是不能防止它之后的事务修改当前事务正在读的数据或者结果集。
所以悲观锁应该是为了避免幻想读和不可重复读。悲观锁将正在读的数据锁住(实现方式是select语句后面加上for update),这样它之后的事务就不可以修改数据。
乐观锁和读数据的正确性没有关系,乐观锁是为了避免两个事务同时修改同一条数据,实现方式是在目标表上增加一列来记录版本号,每一个修改会把版本号+1,在提交的时候判断版本号是否小于+1后的版本号,如果不是,就知道别人修改了这条数据,进行相应的业务处理, 例如事务的回滚等。
0 0
- 悲观锁和乐观锁的理解
- 数据库的乐观锁和悲观锁的理解
- 深入理解乐观锁和悲观锁
- 深入理解悲观锁和乐观锁
- 数据库乐观锁和悲观锁的一些理解
- 数据库中乐观锁和悲观锁的理解
- 数据库中乐观锁和悲观锁的理解
- 悲观和乐观锁
- 一分钟理解乐观锁和悲观锁,附深入理解乐观锁与悲观锁
- Oracle的悲观锁和乐观锁
- 悲观锁和乐观锁的实现
- Oracle的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- hibernate的 悲观锁和乐观锁
- Oracle的悲观锁和乐观锁
- Oracle的悲观锁和乐观锁
- Hibernate的悲观锁和乐观锁
- hibernate的悲观锁和乐观锁
- HDU 1729 Stone Game
- TCP/IP协议各层数据格式及首部含义
- ubuntu下navicat试用到期解决办法(删除system.reg之后navicat不能运行解决办法)
- ListView的头部添加react-native-swiper不显示的问题
- VS2013 warning LNK4099:未找到 PDB“vc120.pdb”xxxx 问题解决方案
- 悲观锁和乐观锁的理解
- 动态规划法(五)——多段图问题
- eclipse 运行java程序报错 “错误: 找不到或无法加载主类 ”
- 关于kittle启动中异常关闭的解决方案——批处理方式解决
- ResNeXt
- MySQL开发实践8问,你能hold住几个?
- PreferenceFragment详解
- 如何在Linux上搭建android-studio
- setTimeout和setInterval的区别