经营范例.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
经营范例

前言首先思考一个问题:如果对数据库进行了多次修改,如果前面的修改成功,后面修改时发生了意外,怎么办?案例:以银行转账为例。有帐户表记录如下:帐号姓名余额1 张三 20002 李四 1000假设张三给李四转账300块,则对数据库的修改必然有两步:第一步:减少张三的余额:2000→1700第二步:增加李四的余额:1000→1300但是如果第一步完成以后,马上就死机(或者断电、地震……)了。等数据库重启以后,目前的帐户情况变为:帐号姓名余额1 张三 17002 李四 1000这表示,张三的余额减少了,但是李四并没有收到转账的钱。说明:?在实际的银行项目中,转账不会是只有一个帐户表,直接进行余额修改。在此简化的目的是为了便于说明事务的相关概念。思考:数据库如何操作才能避免这种情况发生呢?要解决上面的问题,必须学习一个新的知识点:事务,这是数据库中非常重要的概念,必须掌握!问题:为什么要事务?回答:在对数据进行多次增删改以后,如果要保证所有的操作同时成功,或者同时失败。必须使用事务。问题:什么是事务?回答:事务就是业务上的一个逻辑工作单元,它能够保证其中对数据所有的操作,要么全部成功,要么失败。例如在转账时,一个帐户要增加余额,一个帐户要减少余额,这两个操作在业务上必须当一个整体,也叫做“一个逻辑工作单元”。“符合逻辑”就是指满足符合业务要求。问题:事务的原理是什么?回答:主要依赖于日志。如果事务没有完成,则日志中没有结束标记,数据库就会执行前面各步的反向操作,例如:1、事务开始→张三减300(2000→1700)→死机。2、数据库重启→读取日志,检查事务没有结束标记,执行“反向”操作→张三加300(1700→2000)→张三数据恢复了。说明:数据库事务恢复的过程其实是很很复杂的,在此只是讲解最基本的原理。问题:事务有哪些特征?回答:一共有4个:?原子性:以转账为例。帐户减少与帐户增加是两个DML语句,但是被当一个“原子”,所以外部程序是不知道这个原子中有几个SQL的。更不能只执行其中一个SQL,只能同时成功,或者同时失败。即:无法拆出事务中某一条SQL语句来单独执行。?一致性:要么都是改变前的改变,要么都是改变后的状态。例如:转账前分别是1000与2000,总与3000;转账300后分别是1300与1700,总与也是3000。这就叫做一致性。不一致就是,转账后分别1300与2000(不变),总是3300,一个是改变后的状态,另一个还是改变前的状态。?隔离性:在某个时间段,肯定有很多人都在转账,每个人的转账都是在一个自己的事务中,所以在一个数据库中,有很多事务会同时存在。虽然同时存在很多事务,但是事务之间不会相互影响。?持久性:如果事务提交成功,则数据修改永远生效;如果是回滚,则数据完全没有被修改,就相当于没有这件事情发生。事务结束以后,必须重新启动一个新的事务才能修改数据。说明:可以用口诀(一原永隔)来帮助记忆。问题:如何使用事务?回答:一共有三步。1、先开启事务。?在Oracle中,事务是在上一次事务结束以后,数据“第一次”被修改时自动开启。?在java中,设置连接为手动提交模式开始。代码:connection.setAutoCommit(false)。2、进行(多次)数据操作(增删改)……3、结束事务: commit、rollback。问题:如何结束事务?回答:有两种方法:1、确认对数据的修改:提交,commit。2、撤消对数据的修改:回滚,rollback。另外,当Oracle系统或者PL/SQL脚本抛出异常,都会造成数据回滚。问题:能不能做局部提交或者局部回滚?如执行了三个insert语句,能不能只提交或者回滚前面2个。回答:如果说要提交,只能提交所有的sql语句。如果说要回滚,可以利用“事务保存点”来做局部回滚。注意,此时事务并没有结束。示例:执行:1、 insert into dept values(50,a,null);2、 insert into dept values(60,b,null);3、 savepoint a;4、 insert into dept values(70,c,null);5、 rollback to savepoint a;问题:现在插入了几个新部门?分析:回滚到保存点“a”,表示保存点以后的所有数据操作取消。所以只插入了两个部门。问题:现在的事务结束了吗?回答:没有,必须再执行commit或者rollback来结束事务。说明:在工作中这种“局部回滚”用得比较少。示例:异常与事务。问题:假设现在有50与60两个新部门。执行下面代码以后,这两个部门删除了没有?begindelete from dept where deptno=50;delete from dept where deptno=6

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档