事务相关概念

news/2025/2/19 8:27:56/

事务

  • 事务属性:隔离级别
    • 1、数据库访问中三个读的问题
    • 2、隔离级别介绍
    • 3、使用方式

事务属性:隔离级别

事务:逻辑上的一组操作,这些操作要么都成功,有一个失败所有都失败

1、数据库访问中三个读的问题

1、脏读:在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。

2、不可重复读:指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。如事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果

3、虚读(也称幻读):幻读,即一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样.

2、隔离级别介绍

数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。一个事务与其他事务隔离的程度称为隔离级别。SQL标准中规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。

隔离级别一共有四种:

  • 读未提交:READ UNCOMMITTED (read uncomitted)

    允许Transaction01读取Transaction02未提交的修改。

  • 读已提交:READ COMMITTED(read committed)

    要求Transaction01只能读取Transaction02已提交的修改。

  • 可重复读:REPEATABLE READ (repeatable read)

    确保Transaction01可以多次从一个字段中读取到相同的值,即Transaction01执行期间禁止其它事务对这个字段进行更新。

  • 串行化:SERIALIZABLE(serializable)

    确保Transaction01可以多次从一个表中读取到相同的行,在Transaction01执行期间,禁止其它事务对这个表进行添加、更新、删除操作。可以避免任何并发问题,但性能十分低下。

各个隔离级别解决并发问题的能力见下表:

隔离级别脏读不可重复读幻读
READ UNCOMMITTED (read uncomitted)读未提交
READ COMMITTED (read comitted) 读已提交
REPEATABLE READ (repeatable read) 可重复读
SERIALIZABLE (serializable) 串行化

各种数据库产品对事务隔离级别的支持程度:

隔离级别OracleMySQL
READ UNCOMMITTED(read uncommited)×
READ COMMITTED(read committed)√(默认)
REPEATABLE READ(repeatable read)×√(默认)
SERIALIZABLE(serializable)

3、使用方式

@Transactional(isolation = Isolation.DEFAULT)//使用数据库默认的隔离级别
@Transactional(isolation = Isolation.READ_UNCOMMITTED)//读未提交
@Transactional(isolation = Isolation.READ_COMMITTED)//读已提交
@Transactional(isolation = Isolation.REPEATABLE_READ)//可重复读
@Transactional(isolation = Isolation.SERIALIZABLE)//串行化

http://www.ppmy.cn/news/46110.html

相关文章

网络请求实战-实战websocket聊天程序

目录 WebSocket协议初探 Socket连接的建立过程 聊天室:node.js端 聊天室:web端 小结 WebSocket协议初探 一个基于TCP的通信协议 复用HTTP的握手基于TCP传输协议 101切换协议 WebSocket连接之后,传输的都是二进制数据了 Socket连接的建…

MicroPython ESP8266 GPIO引脚使用详解

MicroPython ESP8266 GPIO引脚使用 📌相关篇《【MicroPython esp8266】固件烧写教程》 ✨本案例基于Thonny平台开发。✨ 📜固件版本信息:MicroPython v1.19.1 on 2022-06-18; ESP module with ESP8266 🔖ESP8266可用管脚有&…

连锁店销售管理系统有哪些功能?应该如何选购?

不管是直营还是加盟,想要实现门店的精细化管理,把不同门店的业绩做好,离不开连锁店销售管理系统的支持。 一款真正能够为连锁店经营带来帮助的连锁店销售管理系统应该具备哪些基本功能,以及选择连锁店销售管理系统时有哪些常见的问…

SpringSecurity之权限中JWT应用

目录 前言 什么是J W T 1、访问令牌 2、J W T组成内容 J W T 头 有效载荷 签名哈希 Base64URL算法 前言 上一篇我们讲解了SpringSecurity之微服务权限解决方案,接下来我们看看在微服务中使用到的凭证Tokens的生成工具J W T 什么是J W T 1、访问令牌 自包…

鏖战大模型,未必能拯救商汤

在不被资本市场看好的质疑声中,商汤科技于近日跟风推出了自己的大模型产品,而且还直接打造了一个大模型超市,声称包括CV(计算机视觉)、NLP(​​​​​​​自然语言处理)、AIGC(人工智…

【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)

最终效果预览 实现流程 微信小程序中使用 echarts 需使用官方提供的 ec-canvas 组件 1. 下载 ec-canvas 组件 点击下方链接,下载 ec-canvas 组件 https://gitcode.net/mirrors/ecomfe/echarts-for-weixin/-/tree/master 将其中的 ec-canvas 文件夹拷贝到微信小程序…

【Docker】书写dockerfile制作镜像

目录 前言 书写Dockerfile 前言 在软件开发和部署领域,Docker已经成为了一种不可或缺的工具。通过使用Docker,我们可以轻松地打包、分发和部署应用程序,确保跨平台的兼容性和环境的一致性。为了更好地利用Docker的优势,我们需要…

如何通俗易懂的解释无线通信中的那些专业术语!

这是一篇来自网络的非常经典的一篇老文,原作者不详,但非常值得一读! 香农定理 类比:城市道路上的汽车的车速和什么有关系?和道路的宽度有关系,和自己车的动力有关系,也其他干扰因素有关系&…