事务4976986287

上传人:新** 文档编号:567514258 上传时间:2024-07-21 格式:PPT 页数:21 大小:1.21MB
返回 下载 相关 举报
事务4976986287_第1页
第1页 / 共21页
事务4976986287_第2页
第2页 / 共21页
事务4976986287_第3页
第3页 / 共21页
事务4976986287_第4页
第4页 / 共21页
事务4976986287_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《事务4976986287》由会员分享,可在线阅读,更多相关《事务4976986287(21页珍藏版)》请在金锄头文库上搜索。

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(cur

2、rentMoney=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元

4、 总额多出了1000元!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一致性(

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

7、 bank SET currentMoney=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使用事务解决银行转帐问题事务开始事务

8、成功则提交,不成功则回滚12如何创建事务转帐事务前转帐事务过程中转帐事务结束后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.以下哪条语句操作不

9、能被取消? ( )l AINSERT 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

10、VALUES(19);l SAVEP0INT 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

11、特性。l事务缺省情况下任何一个DML语句都会开始一个事务,直到用户发出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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号