版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《数据库原理与应用》任务4.6使用事务完善供电审批项目4:数据库编程第17讲错综复杂的事务处理主讲人:汪菊琴本任务将采用事务进一步完善任务4.4中的审批供电申请存储过程P_APPROVAL,以保证审批供电申请中的两个操作要么都成功,要么都不成功,从而确保电力系统的数据一致。素质目标能力目标知识目标1)理解事务的概念和特性。2)掌握事务控制语句的使用。3)了解事务隔离和锁机制。1)能够利用事务处理保障数据操作准确与一致。1)培养责任意识和严谨的工作作风。2)建立性能与数据一致性平衡的工程思维。1.事务的概念4.6.1事务概述A在银行有2000元存款B在银行有3000元存款A在银行有1500元存款B在银行有3500元存款A转500元给B1、从A中减500元2、将500元加到B中
两个严重的问题停电了问题一?4500问题二1.事务的概念4.6.1事务概述A在银行有2000元存款B在银行有3000元存款A在银行有1500元存款B在银行有3500元存款2、将500元加到B中1、从A中减500元将多个操作组成一个整体,要么都执行,要么都不执行。这样的一个整体就是事务。如何解决这两个问题2.并发控制两个或多个事务在同一时刻(时间上重叠)访问同一个数据库对象(例如同一行)的现象称为并发。并发控制是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性、一致性以及数据库的一致性。
事务是并发控制的基本单位。事务应该保证下述两类事件发生时,数据库管理系统能够正常运行。事务在运行过程中被强行停止(例如停电、系统崩溃)多个事务并发运行时,不同事务的操作交叉执行4.6.1事务概述3.事务的特性
4.6.1事务概述多个操作组成一个整体原子性要么都执行(新的一致性状态)要么都不执行(旧的一致性状态)一致性事务之间不能相互干扰隔离性一旦完成,数据库的改变是永久的持久性事务被强制中止时,不会对数据库造成影响事务AA0A1事务BB0B1事务CC0C1时间点1事务DD0D13.事务的特性
4.6.1事务概述时间点2多个事务并发执行时,相互之间没有影响事务AA0A1事务BB0B1事务CC0C1事务DD0D13.事务的特性
4.6.1事务概述1.提交事务提交事务就是提交事务对数据库所做的修改,将从事务开始的所有更改保存到数据库中,并最终写入到数据文件。同时,提交事务还会释放由事务占用的资源,如锁等。在达梦数据库中还存在有4种事务模式:(1)自动提交模式:所有的SQL语句都会在执行结束后提交。除了命令行交互式工具DISQL外,达梦数据库默认都采用自动提交模式。(2)手动提交模式:DM数据库用户或者应用开发人员应明确定义事务的开始和结束,这些事务也被称为显式事务。(3)隐式提交:在手动提交模式下,当遇到DDL语句时,DM数据库会自动提交前面的事务,然后开始一个新的事务执行DDL语句。(4)事务组提交:GROUPCOMMIT,这是一种数据优化策略,它允许数据库在一次磁盘操作中提交多个事务,而不是为每一个事务单独执行一次磁盘I/O操作。4.6.2事务控制语句2.回滚事务回滚事务是撤消该事务所做的任何更改,并释放此事务使用的所有数据库资源。达梦DM数据库提供4种回滚机制:自动回滚:数据库异常、连接中断时,系统自动撤销整个未提交事务;手动回滚:执行ROLLBACK语句,手动撤销当前事务全部操作;回滚至保存点:ROLLBACKTO保存点,仅撤销保存点后操作,事务不结束;语句级回滚:单条SQL执行失败时,仅回滚本条SQL,事务可继续执行。
前2种为全事务回滚(事务直接终止);后2种为局部回滚(事务保持活跃)。4.6.2事务控制语句操作1操作2操作N异常?BEGIN/STARTTRANSACTIONCOMMITROLLBACK事务3.事务控制语句4.6.2事务控制语句3.事务控制语句达梦数据库中,控制事务有以下语句:(1) BEGIN/STARTTRANSACTION语句:表示一个事务的开始。(2) COMMIT语句:表示提交,即提交事务的所有操作。(3) ROLLBACK语句:表示回滚,即事务所有已完成的操作全部撤消,回滚到事务开始时的状态。(4) SAVEPOINT<保存点名>语句:表示设置保存点。保存点允许在一个事务内部做一些工作,在特定的条件下回滚这些操作。(5) ROLLBACKTOSAVEPOINT<保存点名>语句:将事务回滚到指定的保存点。
4.6.2事务控制语句3.事务控制语句【例4-36】将例4-35银行转帐的问题改用事务进行处理。
DROPTABLEIFEXISTST_BANK;--先删除例4-35中建的表CREATETABLET_BANK( BANKACCOUNTVARCHAR(20)NOTNULLPRIMARYKEY,--账户,主键
AMMOUNTDECIMAL(20,2) --存款数目);INSERTINTOT_BANKVALUES('A',2000); --账户A有存款2000元INSERTINTOT_BANKVALUES('B',3000); --账户B有存款3000元BEGINTRANSACTION; UPDATET_BANKSETAMMOUNT=AMMOUNT-500 WHEREBANKACCOUNT='A'; UPDATET_BANKSETAMMOUNT=AMMOUNT+500 WHEREBANKACCOUNT='B';COMMIT; --没有错误,提交事务,提交后,数据将永久保存SELECT*FROMT_BANK;3.事务控制语句【例4-36】将例4-35银行转帐的问题改用事务进行处理。
上面事务处理过程中,如未发生故障,语句正常执行,则事务成功提交。最终,A、B账户余额如图a所示,转账成功完成。
若将上述代码中的COMMIT语句改为ROLLBACK语句,会发现账户中金额并没有变化,仍为转账前的状态,如图b所示。图a在银行转账中使用事务图b在银行转账中回滚事务1.读数据现象在多用户的环境下,多个用户同时对数据库并发操作时,可能会出现数据不一致的情况,主要有以下三种:
4.6.3事务隔离和锁机制并发问题问题描述脏读(DirtyRead)A用户修改数据后,B用户读出了该数据,但A因某些原因取消修改并回滚,数据恢复原值,此时B得到的数据与数据库实际内容不一致。不可重复读(NonRepeatableRead)A用户第一次读取某数据后,B用户对该数据进行了修改并提交,此时A用户再次读取同一数据,发现前后两次的值不一致。幻读(PhantomRead)A用户第一次查询得到若干条记录后,B用户插入或删除了几条数据并提交,此时A用户再次执行相同查询,发现数据条数增多或减少,仿佛出现了“幻影”。2.事务隔离级别通过设定隔离级别可避免某些并发问题,事务的隔离级别及其会造成的读数据现象如下表所示。
DM数据库支持三种事务隔离级别:读未提交、读已提交和串行化。其中,读已提交是默认使用的事务隔离级别。可重复读升级为更严格的串行化隔离级。
4.6.3事务隔离和锁机制隔离级别脏读不可重复读幻读READUNCOMMITTED读未提交可能可能可能READCOMMITTED读已提交避免可能可能REPEATABLEREAD可重复读避免避免可能SERIALIZABLE
串行化避免避免避免低高2.事务隔离级别达梦数据库可设置事务的隔离级别,语法格式如下:
其中,隔离级可以取READCOMMITTED、SERIALIZABLE或READUNCOMMITTED。
4.6.3事务隔离和锁机制SETTRANSACTIONISOLATIONLEVEL<隔离级别>;3.锁机制并发控制的主要方法是锁机制。(1)锁的分类1)锁模式DM数据库使用四种不同的锁模式。
4.6.3事务隔离和锁机制锁模式描述共享锁(S锁)用于读操作,防止其他事务修改正在访问的对象。排它锁(X锁)用于写操作,以独占的方式访问对象,不允许任何其他事务访问被封锁对象。意向共享锁(IS锁)一般用于读取被访问对象数据时使用,多个事务可以同时对相同对象上意向共享锁。意向排他锁(IX锁)一般用于修改被访问对象数据时使用,多个事务可以同时对相同对象上意向排他锁。(1)锁的分类2)锁粒度按照封锁对象的不同,锁可以分为TID锁和对象锁。TID锁:以事务ID为封锁对象,每个活动事务对应一把TID锁,用于防止多个事务同时修改同一行,替代传统行锁功能。DM采用行级多版本,每行记录隐含TID字段,用于事务可见性判断。对象锁:是达梦新引入的锁类型,通过统一的对象ID进行封锁,将数据字典锁与表锁合并为一体,旨在减少封锁冲突、提升系统并发性能。
4.6.3事务隔离和锁机制(2)锁等待与死锁检测当一个事务正在占用某个资源的锁,此时另一个事务正在请求这个资源上与第一个锁相冲突的锁类型时,就会导致锁等待。发生锁等待的事务将一直挂起,直到持有锁的事务放弃锁定的资源为止。
当两个或两个以上事务发生锁等待,且它们之间形成了等待环,即每个都等待其他事务释放锁,这时候就产生了死锁。DM数据库采用智能的死锁检测与解决策略,当检测到死锁时会自动选择牺牲其中一个事务以打破僵局。
4.6.3事务隔离和锁机制[任务实施]
本任务采用事务完善任务4.4的审批供电申请存储过程P_APPROVAL。1.技术分析(1) 采用事务控制语句进行事务处理。该事务包含更新T_SUPPLYSTATUS表和向T_SUPPLY表插入数据两个操作。(2) 采用DBMS_OUTPUT.PUT_LINE存储过程向客户端输出调试信息。[任务实施]2.实现步骤(1)复制任务4.4中审批供电申请存储过程P_APPROVAL,修改过程名为P_APPROVAL_TRANS,以示区别。(2)在存储过程体内加入事务控制代码。若第一步的更新操作失败,则回滚已执行的所有操作;若更新成功,则继续第二步的插入操作。若第二步的更新操作失败,则回滚已执行的所有操作;若插入成功,则表示审批流程中的两个操作都已完成,提交事务。使用事务完善供电审批[任务测试]
运行以上代码,并调用该存储过程,假设编号为'100000'的总局工作人员审批通过了'10601'街道第二天的供电申请,代码如下。
调用后,可看到“消息框”中输出了事务执行过程的消息,如图4-30所示。同时,供电量申请表相应申请的相关字段内容已更新,供电量表中也已插入一条新的供电记录。CALLEPDMS.P_APPROVAL_TRANS(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级数学家长会
- 2026廉洁作风面试题及答案
- 医院关于医务人员学术讲课取酬的自查报告(2篇)
- 新生思想动态调查报告2026(3篇)
- 九年级化学中考二轮复习·科普阅读专题高阶思维教学设计
- 春小麦抢墒播种数智化作业标准与效能评估报告(年)
- 小学六年级英语上册Unit 4第2课时:语言综合运用与跨文化交际能力培养教案
- 基于核心素养的初中八年级历史与社会学业考试复习教案
- 九年级化学中考一轮复习专题教案:实验仪器的辨识、选择与规范操作的系统构建
- 小学六年级英语(外研三起):Module6 Unit2《Ive Got a Stamp from China》核心素养教案
- 2025年陕西国防工业职业技术学院高职单招职业技能考试题库【历年真题】附答案详解
- 2026年深圳会计面试试题及答案
- 2026秋部编版五年级上册语文全册教学计划+单元备课方案(新教材完整版)
- 2026年养老服务管理师资格认证考试试题及答案解析
- 2026中国建筑用辐射制冷材料市场化应用障碍及对策
- 2025年南阳市中心医院医护人员招聘考试题库附答案详解
- 2026年内蒙古高考地理真题试卷(含答案)
- 无菌物品储存管理规范与实践指南
- 精密滚珠丝杠滚道研磨加工方法与性能影响的深度剖析
- 工程造价工程量清单编制方案
- 2026年新版医疗器械临床试验质量管理规范培训考核试卷附答案
评论
0/150
提交评论