zoukankan      html  css  js  c++  java
  • Mysql--事务

    • 目的
      • 保证数据库安全稳定运行的技术

    四大特性ACID(原子性、一致性、隔离性、持久性)

    • 原子性

      • 要么都成功, 要么都失败
      • 实现机制是undo log
    • ⼀致性

      • 操作前后, 系统稳定,数据⼀致
      • 原⼦子性不代表⼀致性
        • 脏读/不可重复读/幻读
          • 解决办法 调整事务隔离级别
        • 提交事务后, 只有⼀半操作持久化成功
          • 解决办法redo log
    • 隔离性

      • 每个事务是独立的,相互不会影响
      • 实现机制 多版本并发控制+锁
    • 持久性

      • 保证事务的执行结果⼀定能在数据库中同步完成, 无论数据库所在硬件是否瘫痪
      • 实现机制 redo log

    原⼦子性 持久性 隔离性 实现了了⼀一致性


    MVCC 多版本并发控制

    • 简单来说就是对数据做了多版本处理
    • 事务隔离级别中的RC和RR就是MVCC实现的
    • RR 可重复读级别
      • 快照读 select * from xx; # 在事务中无论读多少次都和第⼀次读的结果⼀样
      • 当前读 select * from xx lock in share mode; select * from xx for update insert update delete
    • RC 读已提交级别
      • 仍然有快照读, 事务提交成功的数据可以读取得到, 但读不到未提交的数据


    UNDO

    • 作用
      • 用于回滚, 实现事务的原子性
      • 实现多版本并发控制(MVCC)
    • 原理
      • 在数据操作执行之前,先将牵扯到的数据备份到undo log, 然后再进行数据的操作。

    Undo Log参与事务的简化过程

    假设有A、B两个数据,值分别为1,2。
    A.事务开始.
    B.记录A=1到undo log.
    C.修改A=3.(写⼊入缓冲区)
    D.记录B=2到undo log.
    E.修改B=4.
    F.事务提交
    
    - 如果出现回滚操作,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。
    - Undo log必须先于数据持久化到磁盘。如果在D,E之间系统崩溃,undo log是完整的,可以用来回滚事务。
    

    REDO

    • Redo Log记录的是新数据的备份。
    • 作用
      • 保证事务持久性
    • 原理
      • 新数据写入内存缓冲区后, 将执行的更更新操作写入redo log, 再将数据写入磁盘(⼀定发生在redo写入之后, 但未必立即执行)
      • 当系统崩溃时,虽然数据没有写入磁盘,但是Redo Log已经持久化。系统可以根据
        Redo Log的内容,将所有数据恢复到最新的状态。
      • 虽然redo log 和写入数据库 都是写入磁盘, 但是redo log的性能⾼高于写入数据库

    Undo + Redo事务的简化过程

    假设有A、B两个数据,值分别为1,2.
    A.事务开始.
    B.记录A=1到undo log.
    C.修改A=3.(写入缓冲区)
    D.记录A=3到redo log.(之后的某个时间点写入磁盘)
    E.记录B=2到undo log.
    F.修改B=4.
    G.记录B=4到redo log.
    J.事务提交
    
    • 数据库恢复
      • mysql重启后⾃自动进行
      • 先REDO,再UNDO
      • 进行恢复时,
        • REDO不区分事务, 会重做所有操作(包括未提交的操作和最终回滚的操作)
        • 然后再由UNDO来回滚未提交和要执行回滚的事务
  • 相关阅读:
    不同的ospf进程发布互联网段可以互通
    大数分解
    主席树(非权值)
    块状数组
    Codeforces Round #744 (Div. 3) G. Minimal Coverage
    记录一种从天而降的掌法(动态维护中位数的方法)
    快速统计二进制中1的数量
    网络流(小常数)
    矩阵快速幂
    米勒罗宾素性检验
  • 原文地址:https://www.cnblogs.com/oklizz/p/11454190.html
Copyright © 2011-2022 走看看