zoukankan      html  css  js  c++  java
  • Mysql的隔离以及实现

    Mysql的隔离级别有四个

    1、读未提交

    2、读提交

    3、可重复读 RR

    4、串行读

    隔离的实现

    每次修改对应一个事务ID:row trx id,还对应一个undo log,因此undo log和row trx id是一一对应的。

    当我们开始一个事务的时候,会生成一个事务的snap shot,将当前正在进行的没有提交的事务id存放到一个数组中。这个数组是静态的,可称之为视图。致性InnoDB就是用这个数组来实现隔离的,从而保证了一致性读。

    数组中最大的ID是自己,表示高水位;最小的是事务id是低水位。

    对于可重复读,小于低水位的数据说明在创建事务之前就已经提交,因此对于本事务是可见的;

    大于高水位的数据是不可见的,是本次事务创建后才创建的事务修改的数据,因此对于本事务是不可见的;

    如果处于低水位和高水位之前的事务修改的数据,则要看该事务id是否落在了视图创建是的事务数组中,如果落在了里面,表示虽然该事务早于我之前创建,但是晚于我事务启动时提交,因此是不可见的。如果没有落在事务id数组中,那么表示本事务创建时,该事务已经提交,因此是可见的。

    以上几个原则,保证了一致性读。

    更新操作的可见性

    数据更新时,必须是在当前的最新的数据上修改,否则某些事务的更新就会被覆盖。因此,事务中的更新操作必须是当前读。这就和我们上面说的一致性读产生了矛盾,或者说是有别于一致性读。此时就要引入行锁,当数据修改,但没有提交时,行锁是一直持有的。因此其他事务的更新操作是会被阻塞的。因此,行锁保证了当前读,也就保证了数据的修改不会被覆盖。

  • 相关阅读:
    Gitlab + Gitlab runner + Window powershell
    python 连接SAP 代码
    【翻译】 For OData For C# play on RESTier
    SAP -熟练使用T-Code SHD0
    SAP MM- BAPI_PO_CHANGE 更新PO version 信息(version management)
    SAP PP- OPK8生产订单打印 配置Smart form.
    SAP Smart Form 无法通过程序自定义默认打印机问题解决
    SAP APO-主数据设置
    SAP APO-PP / DS
    SAP APO-供需匹配
  • 原文地址:https://www.cnblogs.com/howo/p/12694813.html
Copyright © 2011-2022 走看看