1.多个事务并发会出现的错误情况
1)dirty read脏读 --> 读了其他事务没有提交的数据
2)none repeatable read不可重复读 --> 在同一个事务中读两次得到不同的结果
3)phantom read幻读 --> 在同一个事务中读两次得到不同的结果(针对插入和删除)
为了解决事务并发出现的三个问题,我们采用[color=red]四种事务隔离机制[/color]
read-uncommitted、read-committed(oracle默认)、repeatable read(mysql默认)、serializable,考虑效率我们一般采用read-committed,但是这种机制不能解决不可重复读这种情况,故产生悲观锁 乐观锁的概念
2.悲观锁 乐观锁
为了考虑并发的效率,hibernate设置为read commited,但这样会导致上面说的“不可重复读”,这样就产生了悲观锁乐观锁的概念
悲观锁-->使用数据库的锁,在读出来的时候就把数据锁起来,效率较低(..for update)
乐观锁-->定义一个版本号,每次更新之前先比较一下版本,效率较高(因为它不用锁数据)
1)dirty read脏读 --> 读了其他事务没有提交的数据
2)none repeatable read不可重复读 --> 在同一个事务中读两次得到不同的结果
3)phantom read幻读 --> 在同一个事务中读两次得到不同的结果(针对插入和删除)
为了解决事务并发出现的三个问题,我们采用[color=red]四种事务隔离机制[/color]
read-uncommitted、read-committed(oracle默认)、repeatable read(mysql默认)、serializable,考虑效率我们一般采用read-committed,但是这种机制不能解决不可重复读这种情况,故产生悲观锁 乐观锁的概念
2.悲观锁 乐观锁
为了考虑并发的效率,hibernate设置为read commited,但这样会导致上面说的“不可重复读”,这样就产生了悲观锁乐观锁的概念
悲观锁-->使用数据库的锁,在读出来的时候就把数据锁起来,效率较低(..for update)
乐观锁-->定义一个版本号,每次更新之前先比较一下版本,效率较高(因为它不用锁数据)
本文深入探讨了事务并发时可能出现的脏读、不可重复读和幻读问题,并介绍了四种事务隔离级别:read-uncommitted、read-committed、repeatableread和serializable。接着,通过比较悲观锁与乐观锁的特点,阐述了它们在并发控制中的应用及优缺点。
1068

被折叠的 条评论
为什么被折叠?



