事务隔离级别与锁的对应关系_X1800S

事务隔离级别与锁的对应关系_X1800S隔离级别org.springframework.transaction.annotation.Isolationpublic enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_CO..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  • 隔离级别org.springframework.transaction.annotation.Isolation

    public enum Isolation { 
           
        DEFAULT(-1),
        READ_UNCOMMITTED(1),
        READ_COMMITTED(2),
        REPEATABLE_READ(4),
        SERIALIZABLE(8);
    }
    
    • DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_COMMITTED
    • READ_UNCOMMITTED :该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。
    • READ_COMMITTED :该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
    • REPEATABLE_READ :该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
    • SERIALIZABLE :所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

    指定方法:通过使用 isolation 属性设置,例如:

    @Transactional(isolation = Isolation.DEFAULT)
    
  • 脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。然后第一个事务进行回滚,导致了另一个事务读取的是不正确的数据

  • 不可重复读:在一个事务中多次读取同一个数据时,其他事务修改了此数据,导致结果出现不一致。

  • 幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。

共享锁【S锁】

又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排他锁【X锁】

又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

封锁协议
在运用X锁和S锁这两种基本封锁对数据对象加锁时,还需要约定一些规则。例如,何时申请X锁或S锁、持锁时间、何时释放等。这些规则称为封锁协议。通常使用三级封锁协议来在不同程度上解决并发操作的不正确调度带来的丢失修改、不可重复读和读“脏”数据等不一致性问题。
一级封锁协议
一级封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。

二级封锁协议(短锁)
二级封锁协议是指,在一级封锁协议基础上增加事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议出防止了丢失修改,还可以进一步防止读“脏”数据。

三级封锁协议(二级封锁协议的长锁)
三级封锁协议是指,在一级封锁协议的基础上增加事务T在读数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议出防止了丢失修改和读“脏”数据外,还可以进一步防止了不可重复读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169175.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • A*算法之八数码问题 python解法

    A*算法之八数码问题python解法文章目录A*算法之八数码问题python解法问题描述A*算法与八数码问题状态空间的定义各种操作的定义启发式函数的定义人工智能课程中学习了A*算法,在耗费几小时完成了八数码问题和野人传教士问题之后,决定写此文章来记录一下,避免忘记问题描述在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为12380

    2022年4月6日
    60
  • ci框架子类继承父类时,报错Fatal error: Class ‘BaseController‘ not found in C:\xampp\htdocs「建议收藏」

    ci框架子类继承父类时,报错Fatal error: Class ‘BaseController‘ not found in C:\xampp\htdocs

    2022年2月18日
    47
  • Linux下重启tomcat

    linux重启tomcat命令1,进入到tomcat的bin目录下使用ls命令,查看自己的目录文件cd/opt/tomcat_test/bin/(cd后面接自己的环境目录)2、启动tomcat运行bin目录下的启动命令脚本shstartup.sh或者./startup.sh这样tomcat就启用了3.查看tomcat进程是否启动使用psaux|greptomca…

    2022年4月6日
    105
  • 慧荣SM2246XT主控的固态硬盘修复开卡不识别怎么短接方法

    慧荣SM2246XT主控的固态硬盘修复开卡不识别怎么短接方法一块坏了的240G的固态硬盘,电脑完全不认盘了,所以想修复一下,拆开看到主控是慧荣的SM2246XT,幸好此主控是有开卡软件的,下载也比较方便,最新的SM2246XT_MP_EnhancePageMode_MPQ1102A_DBQ0412_FWR1212A.rar修复成功率很高,但跟U盘量产不同,固态硬盘开卡是需要短接的,但很多人不知道SM2246XT的固态硬盘该怎么短接,这里就教大家。如图拆开ssd外壳后可以看到板子上有ROMMODE的字样,那里就是短接的位置了,这里的4个短接点,我们是需要用镊子两两短

    2022年6月14日
    185
  • Ubuntu中的dpkg命令「建议收藏」

    Ubuntu中的dpkg命令「建议收藏」Linux命令学习系列之dpkg命令详解   普通dpkg用法   dpkg-i安装一个Debian包裹文件,如你手动下载的文件。   dpkg-c列出的内容。   dpkg-I从中提取包裹信息。   dpkg-r移除一个已安装的包裹。   dpkg-L列出安装的所有文件清单。同时请看dpkg-c来检查一个.deb文件的

    2022年5月22日
    33
  • PCA9685–16路 PWM模块舵机驱动板–STM32 IIC接口模块[通俗易懂]

    PCA9685–16路 PWM模块舵机驱动板–STM32 IIC接口模块[通俗易懂]目录一、概述和硬件1、概述2、硬件1、电压2、i2c地址3、使能脚二、寄存器功能 MODE1寄存器外面调用的接口  PCA9685是一款基于IIC总线通信的12位精度16通道PWM波输出的芯片,该芯片最初由NXP推出时主要面向LED开关调光,16路12位PWM信号发生器,可用于控制舵机、led、电机等设备,i2c通信,节省主机资源。就是想控制好几…

    2025年6月8日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号