zoukankan      html  css  js  c++  java
  • MySQL 事务锁 & 隔离级别

    MySQL 事务介绍

    事务中的锁

    在事务 ACID特性 过程中,“锁”和“隔离级别”一起来实现 I(Isolation)隔离性的作用。

    锁的类型:

    排他锁:保证在多事务操作时,数据的一致性(在一个人修改数据时,其他人不得修改)
    共享锁:保证在多事务工作期间,数据查询时不会被阻塞

    乐观锁:多实务操作时,数据可以同时修改,谁先提交,以谁为准
    悲观锁:多实务操作时,数据只有一个人可以修改

    锁的粒度:

    表级锁:MyIsam
    行级锁:Innodb

    多版本并发控制(Multi-Version Concurrency Control,MVCC)

    1.只阻塞修改类操作(排他锁),不阻塞查询类操作(共享锁)

    2.乐观锁的机制(谁先提交谁为准)

    事务中的隔离级别

    四种隔离级别

    1.RU级别:READ UNCOMMITTED(独立提交),未提交读,允许事务查看其他事务所进行的未提交更改

    2.RC级别:READ COMMITTED,允许事务查看其他事务所进行的已提交更改,查看不需要重新记入数据库

    3.RR级别:REPEATABLE READ,允许事务查看其他事务所进行的已提交更改,查看数据需要重新进入数据库(InnoDB 的默认级别)

    4.串行化:SERIALIZABLE,将一个事务的结果与其他事务完全隔离

    查看隔离级别

    # 查看隔离级别
    mysql> show variables like '%iso%';
    

    设置隔离级别

    设置 RU 级别

    [root@db03 ~]# vim /etc/my.cnf
    transaction_isolation=read-uncommit
    

    设置 RC 级别

    [root@db03 ~]# vim /etc/my.cnf
    transaction_isolation=read-commit
    

    脏读、幻读、不可重复读(图解

    1.脏读:RU 级别会出现,执行事务修改数据,被读取,但是数据最终回滚了,查询到的数据就是脏读

    2.幻读:RU/RC/RR 级别都会出现,删除所有表数据,删除的同时有人插入数据,查看数据时以为是没删干净

    3.不可重复读:RU/RC 级别会出现,修改数据后被读取,被读取之后再次修改数据,两次数据不一致

  • 相关阅读:
    VUE初始化
    Flask基础
    算法面试题整理
    python基础数据类型整理
    Cookies 和 Session
    Django 第一天
    初入社会八个月总结
    CSS常用选择器
    分享一点漂亮的扁平化网页
    几个漂亮的网页设计
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/13363152.html
Copyright © 2011-2022 走看看