zoukankan      html  css  js  c++  java
  • MySQL 事务隔离级别 图解

    转载出处:https://zhuanlan.zhihu.com/p/102883333

     

    图解 MySQL 事务隔离级别

    4 种隔离级别

    InnoDB 引擎中的事务隔离级别有 4 级,默认是"可重复读"(Repeatable Read)。以下 4 个级别逐渐加强,每个级别都解决了上一个级别的问题,但也留下了新的问题。

    脏读(Read Uncommitted-读未提交)

    一个事务在处理过程中读取了另外一个事务未提交的数据。

     事务 1 更新数据后还未提交,事务 2 就读到了该数据,所以叫 read uncommitted

    读提交(Read Committed)

    读取的数据是其它事务提交后的数据。

    事务 1 更新了数据,但还未提交,这时事务 2 读取到的数据是更新之前的。

    在事务 1 提交后,事务 2 再读取,此时读取到的就是事务 1 更新后的数据。

    这里就有一个问题:::在同一事务过程中,多次读取到的数据是不一致的::。所以又叫"不可重复读"。

    可重复读(Repeatable Read)

    在同一事务中,每次读取的数据是一致的。

    即使事务 1 提交了,事务 2 读取的数据和事务 2 开始时间点的数据是一致的。

    但这是也有一个问题:::如果事务 2 根据查询出的结果进行更新,那么会发现更新时的数据已经变成事务 1 更新后的数据了,而不是事务 2 查询出的数据::。这就是"幻读"。

    串行化

    各事务间互斥。即使是读操作也会互斥。

     mysql默认事务隔离级别是 Repeatable read;

    以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低,像Serializeble这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况来,在MYSQL数据库中默认的隔离级别是Repeatable read(可重复读)。

  • 相关阅读:
    Windows Phone 7 中常用Task
    设置Highchart柱子最大宽度( 让 highcharts支持maxPointWidth属性)
    Asp.Net MVC 使用FileResult导出Excel数据文件
    js获取网页高度
    使用window.addEventListener 和 window.attachEvent 判断浏览器
    slimscroll滚动条插件简单用法
    js中如何快速获取数组中的最大值最小值
    js 判断浏览器类型
    python使用ldap进行用户认证
    关于go声明切片的一些疑问
  • 原文地址:https://www.cnblogs.com/thirteen-yang/p/13600715.html
Copyright © 2011-2022 走看看