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://blog.csdn.net/attilax

    Atiend

     

  • 相关阅读:
    Pandas包对多个数据表(DataFrame)的常用整合功能。
    pandas numpy 简单应用 loandata
    榛果 美团 登录 爬虫 requests session
    python 日期循环
    opencv 验证码 识别
    运行MapReduce任务
    CenOS安装MySQL服务
    leetcode 67. 二进制求和
    最近对一些领域比较感兴趣,这里列举出来供以后查阅
    leet code 1014. 最佳观光组合
  • 原文地址:https://www.cnblogs.com/attilax/p/15198367.html
Copyright © 2011-2022 走看看