• mysql 事务分析小笔记--01


      最近对有些同学问了我下事务的一些相关知识,在高并发下,事务有什么性能影响? 会不会有堵塞的问题? mysql是如何处理这些的。。。。。突然印象中记得很久之前研究过,可是尼玛,忘了。为了重新捡起知识。于是再次进去了深入分析和学习。平时工作忙比较少写博客,今天开始多学会总结和分享啦。

          开始时候,我们首先得了解事务的ACID四个特征(简单,不需再说),隔离的四个级别,innodb的mvcc(多版本并发控制),redo/undo 等等。

      先说事务隔离级别:

        1.Read Uncommitted(未提交读)                                              ---------> read-uncommitted

        2.Read Committed  (提交读)                                               --------> read-committed

        3.Repeatable Read  (可重读) mysql 默认级别                         ---------> repeatable-read

        4.Serializable   (串行化)注:事务级别最高,串行执行                  ---------> serializable

      说事务隔离区别前,先简单说一下怎么设置系统事务隔离级别和会话事务隔离级别

        查看InnoDB存储引擎 系统级的隔离级别 和 会话级的隔离级别

         select @@global.tx_isolation,@@tx_isolation;
     
        更改会话和系统隔离级别
         set session tx_isolation='read-uncommitted';//值看上面 “--->”部分
         set global tx_isolation='read-uncommitted';  //值看上面"--->"部分

         下面以单词首字母作为简称分析:

        1、RU 未提交读

       容易造成脏数据:

        A 和 B 两个实例作为例子

               A:

               B:

        认真看看,尼玛,AB开了未提交隔离模式,B就直接读取A中没有添加的插入那行了。造成了严重的脏数据。提交读,可以帮你解决这个问题。

         2、RC (提交读)

       A:

         B:

             A插入新行,可是在事务B里查询两次,两次结果不一样,明显出现了不可重复读的情况。前后两次不一致。重复读可以给你解决这个问题。

      3、RR (可重复读)

           A:

          B: 

      呵呵,A新增了一行,并且commit,可是在B的事务里,前后两次数据并没有变化。(mysql默认事务隔离级别)

          但是这会有出现一种幻读现象,比如,A事务插了一条,B事务由于查询前后不变,当B去插同一条时候,会报错。

         这个是mysql最常用类型。

      4、Serializable   (串行模式)

          

          A 事务并没有添加的时候,B根本不能往里面插数据。。。。。。

      这种类型,无论是从效率来说还是从实质来说,应用场景不多。

      (试着类型时候,记得把autocommit 关了,不然没有效果) set autocommit=off

      呵呵,从以上四种事务级别来说不同有不同应用。    

    ----------小龙说法,有不同观点有不同见解可以留下意见哈。

  • 相关阅读:
    温故而知新--JavaScript书摘(二)
    WebSocket 浅析
    温故而知新--JavaScript书摘(一)
    HTTP2.0 简明笔记
    XHR简介
    HTTP 1.1学习笔记
    选择一个 HTTP 状态码不再是一件难事 – Racksburg《转载》
    Buffer学习笔记.
    浏览器的userAgent归纳
    Ngnix日志分析
  • 原文地址:https://www.cnblogs.com/qlchan/p/6017195.html
Copyright © 2020-2023  润新知