• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL事务及Spring隔离级别实现原理详解

    1、事务具有ACID特性

    2、事务的隔离级别

    1)隔离级别的定义与问题

    隔离级别 脏读可能性 不可重复度可能性 幻读可能性 加锁读
    READ UNCONMITED Yes Yes Yes No
    RED COMMITED No Yes Yes No
    REPEATABLE READ No No Yes No
    SERIALIZABLE No No No Yes

    2)如果查看修改和MySQL的隔离级别

    show variables like 'tx_isolation';  # 查看隔离级别,MySQL8以前
    show variables like 'transaction_isolation'; # 查看隔离级别,MySQL8
    
    set global transaction_isolation='READ-COMMITTED'; // 设置隔离级别,阀域READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE

    事务的隔离级别可以是Session层的,我们可以对不同的Session设置不同级别:

    set session transaction isolation level read uncommitted;
    set session transaction isolation level read committed;
    set session transaction isolation level repeatable read;
    set session transaction isolation level serializable;

    3)Spring事务隔离级别

    Spring事务默认使用数据库的隔离级别,可以通过注解@Transactional中的isolation参数调整Session级的隔离级别。隔离级别是会话级别的,JDBC的java.sql.Connection接口支持隔离级别的设置。

    Spring在开启事务时(DataSourceTransactionManager.doBegin),根据注解配置,对Connection的隔离级别进行设置:

    MySQL驱动com.mysql.cj.jdbc.ConnectionImpl执行SQL语句调整会话级的隔离级别

    3、死锁

    死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环。死锁示例:

    # 事务一
    start transaction;
    update account set money=10 where id=1;
    update account set money=20 where id=2;
    commit;
    
    # 事务二
    start transaction;
    update account set money=10 where id=2;
    update account set money=20 where id=1;
    commit;

    假设碰巧,事务一和事务二同时执行完第一个update语句,接着准备执行第二条update语句,却发现记录已被对方锁定,然后2个事务都等待对方释放资源,同时持有对方需要的锁,这样就会出现死循环。

    为了避免死锁问题,数据库实现了各种死锁检测和死锁超长机制,InnoDB处理死锁的方式是:将持有最少行级排他锁的事务进行回滚。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 通过实例认识MySQL中前缀索引的用法
    • MySQL前缀索引导致的慢查询分析总结
    • Mysql隔离性之Read View的用法说明
    • 详解MySQL中事务隔离级别的实现原理
    • 聊聊MySQL事务的特性和隔离级别
    • 简述MySql四种事务隔离级别
    • Mysql事务隔离级别原理实例解析
    • Mysql事务隔离级别之读提交详解
    • MySQL 隔离数据列和前缀索引的使用总结
    上一篇:IDEA连接mysql又报错!Server returns invalid timezone. Go to tab and set serverTimezone  prope的问题
    下一篇:MySQL explain获取查询指令信息原理及实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL事务及Spring隔离级别实现原理详解 MySQL,事务,及,Spring,隔离,