• 数据库的隔离级别


    专栏目录请点击

    多事务并发

    脏读

    1. 事务1更新了记录,但是还没有提交,此时,事务2读取了更新后的记录,然后事务1又进行了回滚。目前,事务2读取的数据是无效的数据

    不可重复读

    • 事务1读取了记录,事务2 更新了这条记录,并进行了提交,当事务1再次读取的这条记录的时候,就会发现值不相同了

    幻读

    • 事务1读取了一个字段,事务2在这个表中插入了几行,当事务1再次读取当前表的时候就会发现表的行数不同了

    为了解决上面的问题,数据库就必须拥有隔离并发运行的能力,来避免各种问题

    隔离级别

    简介

    1. 一个事务与其他事务的隔离程度称为隔离级别
    2. 一般隔离性越高,数据的一致性就越好,但并发性就越弱

    类别

    隔离级别简介
    READ UNCIMMITTED(未提交读)事务中的修改,即使没有提交,其他事务也可以看得到,比如脏读问题,不可重复读和幻读都可出现。如无必要,不要随便使用
    READ COMMITTED(提交读)大多数数据库系统的默认隔离级别是READ COMMITTED,这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。可以解决脏读问题,但不能解决其他两个问题
    REPEATABLE READ(可重复读)确保事务可以多次从一个字段中读取相同的值,在这个事务持续的期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读问题,但是不能解决幻读问题
    SERIALIZABLE(可串行化)SERIALIZABLE是最高的隔离级别,它通过强制事务串行执行(注意是串行),避免了前面的幻读情况,由于他大量加上锁,导致大量的请求超时,因此性能会比较底下,再特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别

    查看数据库的隔离级别

    语法一

    查询系统变量

    SHOW VARIABLES LIKE 'tx_isolation';
    SHOW VARIABLES LIKE 'transaction_isolation';
    
    • 1
    • 2

    语法二

    访问系统变量

    SELECT @@tx_isolation;
    SELECT @@transaction_isolation;
    
    • 1
    • 2

    编辑数据库的隔离级别

    设置当前 mySQL的隔离级别

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    
    • 1

    设置全局的隔离级别

    SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
    
    • 1
  • 相关阅读:
    计算机网络之物理层
    分库分表的介绍
    企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot
    item_get-商品详情
    Linux上实现CPU亲缘
    vue3中$refs使用调整
    C++IO流详解
    效率工具:“蓝色书签”文件管理工具免费使用
    JS进阶第一篇:手写call apply bind
    保姆级vue-pdf的使用过程
  • 原文地址:https://blog.csdn.net/youhebuke225/article/details/126864740