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

    MySQL事务

    事务隔离级别, 数据库事务的隔离级别有4种,由低到高分别为

    Read uncommitted

    Read committed [事务更新]

    Repeatable read

    Serializable

    Serializable 序列化
    
    Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
    

    查看事务隔离级别

    show variables like 'transaction_isolation';
    

    事务隔离级别设置

    //设置read uncommitted级别:
    set session transaction isolation level read uncommitted;
    
    //设置read committed级别:[for update]
    set session transaction isolation level read committed;
    
    //设置repeatable read级别:
    set session transaction isolation level repeatable read;
    
    //设置serializable级别:
    set session transaction isolation level serializable;
    

    幻读 -> insert

    ​ (前后多次读取,数据总量不一致)

    解决方案:

    Serializable 序列化 : 传说中的表锁

    ​ Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

    不可重复读和幻读到底有什么区别呢?

    (1)不可重复读是读取了其他事务更改的数据,针对update操作
    解决:使用行级锁,锁定该行,事务A多次读取操作完成后才释放该锁,这个时候才允许其他事务更改刚才的数据。

    (2)幻读是读取了其他事务新增的数据,针对insert与delete操作
    解决:使用表级锁,锁定整张表,事务A多次读取数据总量之后才释放该锁,这个时候才允许其他事务新增数据。

    幻读和不可重复读都是指的一个事务范围内的操作受到其他事务的影响了。只不过幻读是重点在插入和删除,不可重复读重点在修改

    Mysql的默认隔离级别是Repeatable read。

  • 相关阅读:
    玩家的numpertpry 对象 中 不仅仅要同步 君主武将的等级,阶级也要同步
    synchronized 的真正含义
    学习笔记——WPF
    学习笔记——AOP
    好记性不如烂笔头——WebService与Remoting
    好记性不如烂笔头——垃圾回收
    “返回顶部”实现一例
    ASP.NET MVC脚本及样式压缩
    设计模式学习笔记——迭代器模式
    设计模式学习笔记——策略模式
  • 原文地址:https://www.cnblogs.com/leigepython/p/12109136.html
Copyright © 2011-2022 走看看