MySql事务处理.docVIP

  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文档。上传文档
查看更多
MySql事务处理.doc

什么是事务事务就是一段sql?一个atom么回滚(rollback保证数据操作的安全性 为什么出现这种技术 为什么要使用事务这个技术呢??现在的很多软件都是多用户,多程序,多线程的,对同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。事务是必须满足4个条件(ACID) ????? 原子性(Autmic): 事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响! ???? 一致性(Consistency): 事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态! ???? 隔离性(Isolation): 如果多个事务并发执行,应象各个事务独立执行一样! 持久性(Durability): 一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!不加控制的并发存取会产生以下几种错误 1 丢失修改(lost updates)? 当多个事务并发修改一个数据时,不加控制会得出错误的结果,一个修改会覆盖掉另一个修改。? 2 读的不可重复性? 当多个事务按某种时间顺序存取若干数据时,如果对并发存取不加控制,也会产生错误。? 3 脏读(DIRDY DATA),读的不一致性? 4 光标带来的当前值的混乱? 事务在执行过程中它在某个表上的当前查找位置是由光标表示的。光标指向当前正处理的记录。当处理完该条记录后,则指向下一条记录。在多个事务并发执行时,某一事务的修改可能产生负作用,使与这些光标有关的事务出错。? 5 未释放修改造成连锁退出? 一个事务在进行修改操作的过程中可能会发生故障,这时需要将已做的修改回退(Rollback)。如果在已进行过或已发现错误尚未复原之前允许其它事务读已做过修改(脏读),则会导致连锁退出。? 6 一事务在对一表更新时,另外的事务却修改或删除此表的?定义。? 数据库会为每个事务自动地设置适当级别的锁定。对于前面讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一表更新时另外的事务却修改或删除此表的定义,数据库都会自动解决。而另外的三个问题则需要在编程过程中人为地定义事务或加锁来解决。? 事务处理的机制简单地说就是留下更新日志。数据库会根据这些日志信息,在必要时将旧数据取回,或者在发生错误时将数据恢复到原先的状态。 UNDO log日志 UNDO日志又被称为回滚段(Rollback Segment),在进行数据的捕入、更新、删除的场合,保存变更前的数据,在表的内容保存了指向UNDO日志的指针,ROLLBACK时根据这个指针米获得旧数据,并覆盖新数据。ROLLBACK后,或者COMMIT后UNDO日志将被删除。 另外,UNDO日志也使用于保持数据读取的整合性。例如,在用户A对数据进行了更新,但还没有提交时,用户B要参照数据怎么办呢?此时让用户B看到更新后的数据显然是不行的,其实是通过保存的指针让UNDO日志中的数据呈现给用户B的。 REDO log日志 REDO日志根据数据库的不同,有时被称为事务处理日志或日志. 事务处理确定后,由于错误等原因使数据的更新没有正确反映到数据库中的时候,REDO日志提供了数据恢复用的孚段. 仅仅看上述的说明可能还不能理解。那到底[事务处理确定后,数据的更新没有反映到数据库中]这种状态是在什么时候发生的呢?这个必须首先说明。 我们通常提到更新(或变更)就一句话带过,其实在数据库内部是需要经过较复杂的处理的过程的,一般在数据库中进行更新处理时,并非立即更新数据文件,而是首先在被称缓冲(buffer cash)的内存空间中进行数据更新,并将这些保存到DO日志文件中。到现在为止太家会以为所有的处理都是实时的,其实在数据库中向数据文件写入时是有延迟(或称为滞后)的。向数据文件的写入动作是在触发称为检查点( check point) 时非同步进行的。检查点拨一定的周期触发。 如果频繁进行这样复杂的处理的话,尤其是对硬盘进行写入处理时将会出现很高的负荷。因此现在的处理方式是,数据库将对硬盘的写入操作稍微保留片刻, 当检查点(check point)到来时再集中处理,这样就会显著减少访问硬盘的次数,性能得到改善。 问题出现在REDO日志的更新与数据文件的更新之间的延迟上。大家想象一下, 如果在这个延迟的当口发生了停电,硬件错误时会出现什么悄况呢?很显然,内存中的信息将会消失,只剩下在REDO日志中保存的信息了。REDO日志正是用于复原的. 数据库在错误排除后的第一次起动时进行称为Roll forward的处理,Roll forward处理具体做法是,从REDO日志中抽出从最后的检查点到错误发生时间点间的事务处理,然后重新执行一次(REDO)。这样,数据库就恢复

文档评论(0)

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

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

1亿VIP精品文档

相关文档