zoukankan      html  css  js  c++  java
  • mysql innodb下的锁及隔离级别

    innodb引擎支持行级锁。

    锁实现了事务之间的隔离功能。

    悲观锁,排他锁种类:

      1. row-level lock 或record lock    都是指的行级锁

      2. gap                 间隙锁

      3. next-lock              下键锁

    隔离级别(隔离的是数据的读,默认的级别是RR模式):也称读的隔离性级别

    查看数据库当前隔离级别:select @@tx_isolation;

      1. RU  读未递交,出现脏读.  即读取到了内存脏页中的数据

      2. RC  读已递交,出现不可重复读,也出现了幻读,隔离了脏读

      3. RR  可重复读,解决了不可重复读,利用undo的快照技术;

          也会有幻读,但是利用GAP间隙锁+nextlock下键锁可以解决幻读现象,

          该种级别下(利用的MVCC机制),每开启一窗口都会有一undo快照,不论其它窗口中如何修改数据,

          在当前窗口中查到的数据都不会有任何变化,除非重新登陆。

          MVCC多版本控制机制,就是利用undo快照来实现的。

      4. SE  串行化,可以防止死锁,但并发事务性能差

    配置文件中设置隔离级别:vim /xx/my.cnf中添加

      1. transaction_isolation=read-uncommitted

      2. transaction_isolation=read-committed

      3. transaction_isolation=repeatable-read

    脏读讲解:

      发生于RU模式下,即读取到了内存脏页中的数据,叫脏读;

    不可重复读讲解:

      发生于RC模式下,在一个窗口中不断的修改数据并递交,在另一个窗口中每次查询都能查到最新的数据值

      这种现象叫做不可重复读。

    可重复读讲解:

      发生于RR模式下,在一个窗口中不断的修改数据并递交,在另一个窗口中每次查询的结果都是最原始的数据

      除非另一个窗口断开重连(或手动commit下),才能看到修改值。注意前提:登陆好两个窗口后不要断开重连。

    幻读讲解:

      发生于RC和RR模式中,在窗口1中使用范围修改A列的值,窗口2中又插入了此范围的数据,且窗口2先于

      窗口1递交事务,当窗口1中的范围修改执行完成并递交后,查询此范围数据时,会看到A列值不全为修改值,

      即看到了窗口2中新插入的数据A列值未被修改。

      不可重复读和幻读的区别:

        不可重复读表现为某行数据一直在发生变化

        幻读表现为统一修改范围内列值后对修改期间插入的数据不受影响。

      解决幻读的必备条件(范围条件比如为id>5的数据):

        1. 处于RR模式;

        2. GAP间隙锁和nextlock下键锁不是真正的记录锁,不会锁定数据行,只锁定索引列。所以必须为索引列

         利用GAP锁锁定现有id>5范围内一些不连续的间隔,不允许对间隔数据写入

         利用nextlock锁定大于5范围内最大值后的数据,不允许写入大于当前最大id值的数据。

         GAP和nextlock锁是在满足以上2个条件时自动上锁的,之前在RC模式中窗口2中可毫无阻挡的插入范围内数据,

          现在满足以上2条件,再插入时会阻塞在原地。

      

  • 相关阅读:
    struts2+Hibernate4+spring3+EasyUI环境搭建之四:引入hibernate4以及spring3与hibernate4整合
    struts2+Hibernate4+spring3+EasyUI环境搭建之三:引入sututs2以及spring与sututs2整合
    struts2+Hibernate4+spring3+EasyUI环境搭建之二:搭建spring
    Log4j
    【maven学习】构建maven web项目
    struts2+Hibernate4+spring3+EasyUI环境搭建之一:准备工作
    高版本myeclipse破解以及优化
    Eclipse&Myeclipse安装反编译插件
    Flask源码阅读-第四篇(flaskapp.py)
    Flask源码阅读-第三篇(flask\_compat.py)
  • 原文地址:https://www.cnblogs.com/quzq/p/12863016.html
Copyright © 2011-2022 走看看