zoukankan      html  css  js  c++  java
  • 【数据库】悲观锁与乐观锁与MySQL的MVCC实现简述

    悲观锁

    悲观锁,就是一种悲观心态的锁,每次访问数据时都会锁定数据:

    乐观锁

    乐观锁,就是一种乐观心态的锁,每次访问数据时并不锁定数据,期待数据并没作修改,如果数据没被修改则作具体的业务

    应用程序上使用乐观锁的思想

    MySQL的MVCC实现

    多版本并发控制,MVCCMulti Version Concurrent Control,用于实现非锁定的读操作。
    MySQL的InnoDB的可重复读隔离级别中是通过在每条记录中加创建版本删除版本两列来实现,这两列的值是事务的版本号。

    • Insert操作,创建版本为当前事务ID
    • Delete操作,删除版本为当前事务ID
    • Update操作,原记录的删除版本为当前事务ID,新增一条更新后的记录的创建版本为当前事务ID
      数据的样式大概如下图:

    如果需要查询某个事务版本的数据,逻辑如下SQL(只是用SQL表示此逻辑以便理解,内部并非这样实现):

    select * from table where 创建版本 <= 当前版本 and (删除版本 is null or 删除版本 > 当前版本);
    

    问题:可重复读中MVCC如何保证第1次查询和第2次查询的一致性?

  • 相关阅读:
    第二阶段每日总结01
    第十二周进度条
    构建之法阅读笔记05
    找水王01
    第十一周进度条
    第十周进度条
    构建之法阅读笔记04
    第九周进度条
    每日工作总结10
    每日工作总结09
  • 原文地址:https://www.cnblogs.com/nick-huang/p/6653996.html
Copyright © 2011-2022 走看看