数据库一致性与事务管理

上传人:wuy****ng 文档编号:245434338 上传时间:2024-10-08 格式:PPT 页数:16 大小:270.61KB
返回 下载 相关 举报
数据库一致性与事务管理_第1页
第1页 / 共16页
数据库一致性与事务管理_第2页
第2页 / 共16页
数据库一致性与事务管理_第3页
第3页 / 共16页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text styles,第19章 数据库一致性与事务管理,数据库中的数据是每时每刻都有可能发生变化的。但是这种变化必须是可以接受的和合理的。即数据必须保持一致性。事务是保证数据一致性的重要手段。本章将从以下几个方面讲述数据一致性。,什么是数据库一致性和事务,Oracle中的事务,事务的属性和隔离级别,事务的处理原则,通过本章的学习,读者可以对数据一致性有清晰的认识,并了解Oracle中的事务处理原则。,19.1 数据一致性和事务,用户对数据库的操作是复杂多变的。这些复杂的动作可能是一个逻辑整体,如果处理不当极易造成数据不一致。同属一个逻辑整体的操作应该作为一个事务进行处理,从而避免出现数据不一致性。,19.1.1 Oracle中的数据一致性,数据库是现实世界的反映。例如,一个存储了多家连锁店铺库存信息的数据库,如果需要进行货物调配,则需要进行数据更新。从A店调出的货物送至B店,那么A店对应的库存量应该进行削减,B店库存进行相应增加。在数据库中的实际操作应该是两条SQL语句,一条语句减少A店库存,另外一条增加B店库存。但是,数据库有可能抛出这样那样的异常,例如,第一条语句执行完毕,突然断电,或者第二条语句由于其他原因(如表本身的约束)而没有执行成功,就造成了数据不符合实际情况,即实际库存与数据库记录不符。,类似的场景还有很多,但作为存储基础数据的数据库,必须避免任何犯错的可能,即必须保持数据一致性。,19.1.2 Oracle中的事务,事务是保证数据一致性的重要手段。试图改变数据库状态的多个动作应该视作一个密不可分的整体。无论其中经过了多么复杂的操作,该整体执行之前和执行之后,数据库均可保证一致性。整个逻辑整体即使一个事务。,19.2 Oracle中的事务处理,一个事务的生命周期包括,事务开始、事务执行和事务结束。在Oracle中,并不会显式声明事务的开始,而是由Oracle自行处理。事务的结束可以利用commit或者rollback命令。本节将从以下角度讲述Oracle中的事务处理。,利用Commit命令结束事务,利用Rollback命令结束事务,事务属性和隔离级别,19.2.1 利用commit命令界定事务,事务的开始无需显式声明,在一个会话中,一次事务的结束便意味着新事务的开始。事务的结束可以利用commit命令,如示例19-1所示。,【示例19-1】利用commit命令界定事务。,在表warehouse中存储了仓库及库存信息,如下所示。,SQL select*from warehouse;,19.2.2 利用rollback命令界定事务,rollback命令用于回滚事务内的所有数据修改,并结束事务。在示例19-1中,无论进行了多少次调仓,使用rollback命令将忽略所有操作。,【示例19-2】利用rollback命令界定事务。,SQL update warehouse set stock=stock-100 where warehouse_name=A仓 and goods=衬衫;,1 row updated,SQL update warehouse set stock=stock+100 where warehouse_name=B仓 and goods=衬衫;,19.2.3 Oracle事务的属性和隔离级别,Oracle中,可以设定事务的属性和隔离级别,以保证事务运行在某种特定环境。因为数据库状态总是在不断进行变化的,特定的环境有利于事务在一个稳定的状态下工作。这些属性和隔离级别包括:,read only属性;,read write属性;,serializable隔离级别;,read commited隔离级别。,1read only属性,2read write属性,3serializable隔离级别,4read commited隔离级别,19.3 事务处理原则,事务并非Oracle数据库的专利,而是被广泛应用,并具有统一的处理原则。事务的处理原则包括以下几点:,原子性(Atomicity):,一致性(Consistency):,隔离性(Isolation):,持久性(Durablity):,19.3.1 事务的原子性Atomicity,原子性是事务的最基本属性。当事务被提交时,所有数据修改都将被确认;当事务回滚时,所有数据修改都将被忽略。不能出现部分提交部分忽略的情形。当然,具体的实现细节均由数据库实现。对于用户来说,只需使用commit/rollback命令来提交/回滚事务即可。,事务的一致性Consistency,事务的一致性是指,在事务开始之前数据库处于一致性状态,当事务结束之后,数据库仍然处于一致性状态。也就是说,事务不能破坏数据库一致性。,很多情况下,事务内部对数据库操作有可能破坏数据库一致性。例如,在货物调仓的过程中,出仓操作是成功执行的,而入仓失败。此时的事务,如果执行了commit动作,势必破坏数据库的一致性。那么,正确的做法应该是以rollback动作结束事务。,19.3.3 事务的隔离性Isolation,隔离性是事务必须要具备的特性。一个事务在处理过程中,如果总是受到其他事务的影响,那么,事务的执行总是毫无轨迹可循,数据库的最终状态也是随机的。,各个事务对数据库的影响是独立的,那么,一个事务对于其他事务的数据修改,有可能产生以下几种情况。,1脏读取(Dirty Read),2不可重读,3影像读取,隔离层次,脏读取,不可重读,影像读取,非提交读取(Read Uncommited),允许,允许,允许,已提交读取(Read Commited),禁止,允许,允许,可重复读取(Repeatable Read),禁止,禁止,允许,串行读取(Serializable),禁止,禁止,禁止,19.3.4 事务的持久性Durablity,持久性是指,事务一旦提交,对数据库的修改也将记录到永久介质中,例如存储为磁盘文件。即使下一时刻的数据库故障也不会导致数据丢失。当用户提交事务时,Oracle数据库总是首先生成redo文件。redo文件记录了事务对数据库修改的细节,即使系统崩溃,Oracle同样可以利用redo文件保证所有事务成功提交。,19.4 本章实例,当一个事务的隔离级别被设置为serializable后,数据库状态的变化对其是完全透明的。但是,值得注意的是,这里的透明仅仅对于查询动作而言。如果该事务试图修改数据库,同样会受外界事务的影响。,【示例19-5】事务的隔离级别仅对查询操作起作用。,表students是存储了学生信息的数据表,其数据内容如下所示。,SQL select*from students order by student_id;,19.5 本章小结,本章简要介绍了数据一致性以及事务的处理原则。这里,需要区分事务与正确事务的不同。在Oracle中,事务以会话建立,或者以上一次的commit/rollback为开始,以下一个commit或rollback结束。而这个事务是否是一个正确的事务,则要看是否符合事务的处理原则。尤其需要注意的是,不能保持一致性的事务是被严格禁止的。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!