zoukankan      html  css  js  c++  java
  • Atitit 数据库事务实现原理

    Atitit 数据库事务实现原理

     

    1.1. 自己在程序中实现事务操作。

    如果只是需要事务的话,你自己给mongo操作加上事务功能就可以啦。。数据库事务只不过是他自己实现了而已。。如果数据库不支持事务,就要你在代码里面实现事务就可以了。。

    最简单方便的就是使用日志方式来做事务就可以了。。

    比如插入俩个数据。每执行一个sql,就生成一个undo日志即可。。

    Undo日志表如下字段(事务id,表格名称,操作【insert,update,delete】,原记录id,新记录id

     

    如果后面的sql失败了。那么根据undo日志,撤销掉前面执行的sql数据即可。

    主要流程如下。根据事务id,得到前几个sql语句新增的记录id,然后删除这几个id的数据即可。。

     

    如果提交成功,那么可以删除掉此事务id对应的undo日志即可。。

     

    1.2. 事务有两种方式达到这样的目的: Shadow copies/pages(影像拷贝/影像页面): 每ransaction log (事务日志)

    Shadow copies/pages(影像拷贝/影像页面): 每个事务拷贝一份自己的数据库(或者是数据库的一部分),在这份拷贝上操作。出错了,就删除这份拷贝。成功后,使用文件系统的功能 做一下文件交换,替换掉旧的数据。

    Transaction log (事务日志):Transaction log是这样一块存储区域–在事务将数据写到磁盘之前先将信息写到Transaction log文件。这样,如果服务发生崩溃、事务被取消;数据库清楚如果根据日志删除数据,或者继续完成未完成的操作。

     

    1.3. innodb通过undo logredo log来实现。


    事务中,每当执行一条SQL语句对数据产生了影响,就会记录下来与之相反的操作到undo log(撤销日志)中,例如,更新会记录之前的状态,删除会形成insert,添加会形成delete,一旦事务被回滚,则执行undo log中记录的操作,来完成恢复到之前的状态。这里是个 逻辑恢复哦!
    同时,每当执行一条事务中的SQL,会将操作记录到redo log中,此时事务一旦被提交,就将该redolog中的操作,持久化到磁盘上,数据就持久的记录下来了(ACID的D)。

    PS:还有,undolog才是原子性的关键

    2. 隔离级别的概念

     

    关系型数据库工作原理-事务管理(二) - 数据库其他综合 - 红黑联盟.html

     

    作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

    汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

    转载请注明来源: http://www.cnblogs.com/attilax/

    Atiend

     

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/attilax/p/6006321.html
Copyright © 2011-2022 走看看