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。

  • 相关阅读:
    RPC之Thrift系列1-----Thrit介绍
    MYSQL-实现sqlserver- row_number() over(partition by order by) 分组排序功能
    Sql Server 中 PIVOT在mysql 中的实现
    MSSQL中 ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)在Mysql中的实现
    mysql判断表中符合条件的记录是否存在
    mysql对树进行递归查询
    MySql5.6中的表按照时间进行表分区过程中遇到的坑
    .net平台上实现数据库访问工厂,连接不同的数据库
    VS静态编译与动态编译
    CRC原理阐述
  • 原文地址:https://www.cnblogs.com/leigepython/p/12109136.html
Copyright © 2011-2022 走看看