事务4976986287.ppt

上传人:豆**** 文档编号:56515407 上传时间:2022-11-02 格式:PPT 页数:21 大小:1.21MB
返回 下载 相关 举报
事务4976986287.ppt_第1页
第1页 / 共21页
事务4976986287.ppt_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《事务4976986287.ppt》由会员分享,可在线阅读,更多相关《事务4976986287.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、事务事务4976986287目标l理解事务的概念l掌握如何创建事务2为什么需要事务13-1银行转帐l例如,银行转帐问题:假定资金从帐户A转到帐户B,至少需要两步:l帐户A的资金减少l然后帐户B的资金相应增加 帐户帐户A帐户帐户B3l假定张三的帐户直接转帐假定张三的帐户直接转帐1000元到李四的帐户元到李四的帐户为什么需要事务13-2CREATE TABLE bank(customerName CHAR(10),-顾客姓名 currentMoney MONEY -当前余额)GOALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(curren

2、tMoney=1)GOINSERT INTO bank(customerName,currentMoney)VALUES(张三,1000)INSERT INTO bank(customerName,currentMoney)VALUES(李四,1)创建帐户表,存放用户的帐户信息添加约束:根据银行规定,帐户余额不能少于1元,否则视为销户 张三开户,开户金额为1000元;李四开户,开户金额1元 4为什么需要事务13-3l目前两个帐户的余额目前两个帐户的余额总和为:总和为:1000+1=1001元元 56为什么需要事务13-4l模拟实现转帐模拟实现转帐:从张三的帐户转帐1000元到李四的帐户/*-转

3、帐测试:张三转账1000元给李四-*/-我们可能会这样这样编写语句-张三的帐户少1000元,李四的帐户多1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GO-再次查看转帐后的结果。SELECT*FROM bank请问:执行转帐语句后,张三、李四的帐户余额为多少?l张三的帐户没有减少 l但李四的帐户却多了1000元 l100010012001元 总额多出了1000元

4、!7为什么需要事务13-5-张三的帐户减少1000元,李四的帐户增加1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GOl错误原因分析:错误原因分析:UPDATE语句违反约束:余额=1元执行失败,所以张三还是执行失败,所以张三还是1000元元继续往下执行继续往下执行:执行成功,所以李四变为:执行成功,所以李四变为1001元元如何解决呢?使用如何解决呢?使用事务事务

5、8什么是事务l事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作l这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 l事务是一个不可分割的工作逻辑单元 转帐过程就是一个事务。它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。9事务的特性事务必须具备以下四个属性,简称ACID 属性:l原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行l一致性(Consistency

6、):当事务完成时,数据必须处于一致状态l隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务l永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性10如何创建事务l使用下列语句来管理事务:l设置事务:SET TRANSACTIONl提交事务:COMMITl回滚(撤销)事务:ROLLBACKl存储点:SAVEPOINT一旦事务提交或回滚,则事务结束。11关键语句讲解begin/*-转帐:张三的帐户少1000元,李四的帐户多1000元*/UPDATE bank SET c

7、urrentMoney=currentMoney-1000 WHERE customerName=张三;UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四;COMMIT;dbms_output.put_line(交易成功);exception when others thendbms_output.put_line(交易失败,回滚事务);ROLLBACK;end;print 查看转帐事务后的余额SELECT*FROM bank 如何创建事务l使用事务解决银行转帐问题事务开始事务成功则提交,不成功则回滚12如何

8、创建事务转帐事务前转帐事务过程中转帐事务结束后l演示:转帐1000,转帐失败的情况13如何创建事务转帐事务前转帐事务过程中转帐事务结束后l演示:转帐800,转帐成功的情况14DDL语句对事务的影响lInsert into some_table values(Before);l Create table T(x int);lInsert into some_table values(After);l Rollback;l提问:如果插入After的行失败,前三句发生什么?l如果最后发出Commit命令,Commit命令影响的哪些操作。15练习l1.以下哪条语句操作不能被取消?()l AINSERT

9、 INTO dept VALUES(50,ADMIN,BOSTON);l BDELETE FROM dept WHERE deptno=40;l CUPDATE emp SET sal=sal*1.1;l DTRUNCATE TABLE emp;l2.SAVEPOINT 命令表示事务中的逻辑断点,而不是结束当前事务:()lA.正确 B.错误16练习l3.设TEMP表已创建且只有一个NUMBER(5)类型字段,请阅读以下语句:()l INSERT INTO TEMP VALUES(9);l SAVEPOINT A;l INSERT INT0 TEMP VALUES(19);l SAVEP0INT

10、 B;l INSERT INTO TEMP VALUES(29);l SAVEPOINT C;l ROLLBACK TO B;l CREATE TABLE T3(COLA NUMBER(5);l ROLLBACK;l执行以上语句会提交几条记录?lA0 B1 C2 D317练习l4.以下哪种情况不会提交事务?()l A使用EXIT退出SQL*Plus BCOMMITl C使用Ctrl+Break 中断SQL*Plus运行 DCREATE TABLE18总结 2-1l数据库事务具有如下特性:l原子性l一致性l隔离性l持久性以上四个特性也称为ACID特性。l事务缺省情况下任何一个DML语句都会开始一

11、个事务,直到用户发出Commit或Rollback操作,这个事务才会结束 19总结 2-2l事务结束的地方有:l1.执行Commit,Rollback,没有使用savepoint.l2.执行DDL操作如:create,drop,rename,alterl3.断开与Oracle的连接,事务将自动提交。l4.用户进程异常终止,当前事务回滚。20总结2-3lCommit操作Oracle做了:l1.与UNDO表空间关联的内部事务表记录该事务已经提交,产生唯一的系统交易号(SCN)保存到该表中。l2.LGWR进程将SGA中的重做日志写入redo log文件,当然也要写SCN到重做日志文件。l3.Oracle释放锁定表中的行。l4.Oracle设置该事务完成。21

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 企业培训

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁