事务的更新丢失
来源:互联网 发布:软件类企业安全教育 编辑:程序博客网 时间:2024/05/22 17:48
更新丢失:
如果多个线程操作,基于同一个查询结构对表中的记录进行修改,那么后修改的记录将会覆盖前面修改的记录,前面的修改就丢失掉了,这就叫做更新丢失。
Serializable可以防止更新丢失问题的发生。其他的三个隔离级别都有可能发生更新丢失问题。Serializable虽然可以防止更新丢失,但是效率太低,通常数据库不会用这个隔离级别,所以我们需要其他的机制来防止更新丢失:
乐观锁和悲观锁不是数据库中真正存在的锁,只是人们在解决更新丢失时的不同的解决方案,体现的是人们看待事务的态度。
悲观锁:认为每一条sql语句都会出现更新丢失的情况
隔离级别不设置为Serializable,防止效率过低。
在查询时手动加上排他锁。
如果数据库中的数据查询比较多而更新比较少的话,悲观锁将会导致效率低下。
乐观锁:认为每一条sql语句都不会出现更新丢失的情况
在表中增加一个version字段,在更新数据库记录是将version加一,从而在修改数据时通过检查版本号是否改变判断出当前更新基于的查询是否已经是过时的版本。
如果数据库中数据的修改比较多,更新失败的次数会比较多,程序需要多次重复执行更新操作。
阅读全文
2 0
- 事务的更新丢失
- 事务丢失更新的解决方案
- Spring事务的更新丢失
- spring事务的更新丢失
- 事务概念以及更新丢失的解决
- 关于事务 --- 丢失更新
- 事务的概念和丢失更新的解决方式
- 丢失更新的问题
- Spring中事务的(特性,传播行为,隔离级别,不合理现象,丢失更新,案例..)
- 数据库事务的ACID隔离级中P0(脏写)和P4(更新丢失)的区别
- Spring 五个事务隔离级别和七个事务传播行为和数据读取出现的四个问题(丢失或覆盖更新、脏读、非重复读、幻想读)
- 丢失更新
- 两种丢失更新的区别
- Oracle 丢失更新问题的解决方案
- 两种丢失更新的区别
- 关于更新用户信息丢失头像的问题
- Fragment的事务操作&Actvity的状态丢失
- undo丢失且存在未提交事务的恢复
- HTML&CSS基础篇之十:CSS基础
- HTML中meta标签的作用与使用
- C# Foreach循环本质与枚举器
- ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password)
- Eclipse中修改SVN用户名和密码方法[转]
- 事务的更新丢失
- 习题 3.2 存款利息的计算。有1000元,想存5年,可按以下5种办法存:
- 《Effective Java 学习笔记 第二章》
- vim命令详解
- 51单片机中断
- Hadoop中的Context使用
- 数据结构之哈希表
- 2017 Multi-University Training Contest
- C语言中volatile关键字的作用