数据库事务与并发处理_第1页
数据库事务与并发处理_第2页
数据库事务与并发处理_第3页
数据库事务与并发处理_第4页
数据库事务与并发处理_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

05数据库事务与并发处理1教学内容2数据库事务的概念声明事务边界并发问题设置事务隔离级别使用悲观锁解决并发问题使用乐观锁解决并发问题数据库事务的概念3事务是指一组相互依赖的操作行为,如银行交易,股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务的失败,例如:Tony到银行办理转帐事务,把

100元钱转到jack的帐号上,这个事务包含以下操作行为:1.从tom的帐户上减去100元。2.往jack的帐户上增加100元。以上两个操作必需作为一个不可分割的工作单元,任何一个行为的失败整个转帐都不会成功。数据库事务是对现实生活中事务的模拟,它由一组在业务逻辑上相互依赖的SQL语句组成。事务的四个特性4原子性:Atomicity一致性:Consistency隔离性:Isolation持久性:Durability数据库事务的生命周期5声明事务的边界6事务的开始边界事务的正常结束边界(COMMIT):提交事务,永久的保存被事务更新后的数据库状态。事务的异常结束边界(ROLLBACK):撤销事务,使数据库退回到执行事务前的初始状态。通过JDBC

API来声明事务边界7Connection类提供了用于控制事务的方法:setAutoCommit(booleanautoCommit):设置是否自动提交事务commit():提交事务rollback():撤销事务通过Hibernate

API声明事务的边界8声明事务的开始边界Transaction

tx

=

session.beginTransaction();提交事务mit();撤销事务tx.

rollback()多个事务并发运行时的并发问题9单个事务能保证单项业务的数据完整性,但是当多个事务同时运行时可能带来并发问题,具体体现在:第一类丢失更新:在撤销一个事务时,把其它事务提交的更新数据覆盖。脏读:一个事务读到另一事务未提交的更新数据。虚读:一个事务读到另一事务已提交的新插入的数据。不可重复读:一个事务读到另一事务已提交的更新数据。第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一事务已提交的更新数据。第一类丢失问题时间取款事务转账事务T1开始事务T2开始事务T3查询账户余额为1000元T4查询账户余额为1000元T5汇入100元把余额改为1100元T6提交事务T7取出100元把余额改为900元T8撤销事务余额恢复为1000元10脏读问题时间取款事务转账事务T1开始事务T2开始事务T3T4查询账户余额为1000元T5取出100元把余额改为900元T6查询账户余额为900元(脏读)T7撤销事务余额恢复为1000元T8汇入100元把余额改为1000元T9提交事务11虚读问题时间注册事务统计事务T1T2开始事务开始事务T3统计注册客户总数为10000人T4T5T6注册一个新用户提交事务统计注册客户总数为10001人T7到底哪一个统计数据有效?12不可重复读转账事务时

间 取款事务T1

开始事务元T2T3查询账户余额为1000开始事务T4T5取出100元把余额改为900元查询账户余额为1000元T6T7提交事务查询账户余额为900元T8余额到底是1000元还是900元?13第二类丢失更新时

间 取款事务转账事务开始事务查询账户余额为1000元取出100元把余额改为900元提交事务T1

开始事务T2T3

查询账户余额为1000元T4T5T6T7T8汇入100元把余额改为1100元T9提交事务14数据库的事务隔离级别15隔离级别与并发性能的关系16设定隔离级别的原则17隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数据应用程序,可以优先考虑把数据库系统的隔离级别设为ReadCommitted,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读,虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序悲观锁和乐观锁来解决。在hibernate中设置隔离级别18使用悲观锁19利用悲观锁协调并发事务20使用乐观锁21利用<version>元素对Accounts表中的记录进行版本控制22利用<version>元素对Accounts表中的记录进行版本控制23利用<version>元素对Accounts表中的记录进行版本控制24利用<version>元素对Accounts表中的记录进行版本控制25利用乐观锁协调并发事务的处理26时间取款事务支票转帐事务T1开始事务T2开始事务T3Select

*fromcounts

where

id=1,查询结果显示余额为1000T4Select

*fromcounts

where

id=1查询结果显示余额为1000,乐观锁字段

version值为0T5取出100,updatecounts

set

amount=

900,version=1whereid=1and

version

=

0T6提交事务T7汇入操作:updatecounts

set

amount=1100,

version=1where

id=1

andversion=0,找不到匹配的记录,抛出:StaleObjectStateException实现乐观锁的其它方式27注解的方式加乐观锁28@org.hibernate.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论