zoukankan      html  css  js  c++  java
  • MySQL事务(三)

    一、事务(Innodb锁)的隔离级别概述

    并发事务带来的问题:

            更新丢失(lost update):当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题——最后的更新覆盖了由其他事务所做的更新;

            脏读(dirty reads):一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此做进一步的处理,会产生未提交的数据依赖关系。

            不可重复读(non-repeatable reads):一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变或某些记录已经被删除

            幻读(phantom reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的数据

      “更新丢失”通常是应该完全避免的。但防止更新丢失,并不能单靠数据库事务控制器来解决,需要应用程序对要更新的数据加必要的来解决。

       脏读,不可重复读,幻读其实都是数据库读一致性问题,必须由数据库提供一定的事务隔离机制来解决、

      

      平衡“隔离”与“并发”的矛盾。

            未提交读,读数据一致性——最低界别,只能保证不读取物理上损坏的数据。

            已提交读,读数据一致性——语句级

            可重复读,读数据一致性——事务级

            可序列化,读数据一致性——最高级别,事务级

      

    二、数据库实现事务隔离的方式:

            1.在读取数据前,对其加锁,阻止其他事物对数据进行修改

            2.不加任何锁,通过一定机制生成一个数据请求时间点的一致性数据快照,并用这个快照来供一定级别(语句级或事务级)的一致性读取,从用户的角度来看,好像是数据库可以提供同一数据库的多个版本,叫做数据多版本并发控制(MVCCMCC),常称为多版本数据库

     

    三、画图说明事务的隔离级别的概念和基本使用

     

    可串行化的隔离级别最高,如图

     

    四、如何设置事务的隔离级别

    基本语法是:

    mysql>set  session  transaction  isolation  level  隔离级别名称;

    mysql默认的隔离级别

    五、事务的四个特性(acid)

     推荐博文:https://juejin.im/post/5caaaa67e51d452b63241954

  • 相关阅读:
    你的C/C++程序为什么无法运行?揭秘Segmentation fault (2)
    亲,这就是遗传算法
    我们为什么需要Map-Reduce?
    搜索引擎-架构概述(2)
    搜索引擎-架构概述(1)
    单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)
    最小生成树-普利姆算法eager实现
    最小生成树-普利姆算法lazy实现
    最小生成树-克鲁斯卡尔算法(kruskal's algorithm)实现
    索引式优先队列(indexed priority queue)
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10478076.html
Copyright © 2011-2022 走看看