事务的4大特性、隔离级别、传播机制

目录

  • 一、4大特性(ACID)
  • 二、隔离级别
  • 三、传播机制

一、4大特性(ACID)

  • 原子性(A):在一个事务中,要么全部成功,要么全部失败。
  • 一致性(C):事务完成时,所有数据都保持一致的状态,例如:在银行转账,A向B转1000,A扣1000,B加1000要一起成功或失败。
  • 隔离性(I):多个事务的执行是互不干扰的。
  • 持久性(D):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

参考: 事务的4大特性、事务隔离级别、事务传播行为

二、隔离级别

  • 读未提交(脏读)
    • 其他事务还没提交,但是当前事务已经读到了被修改的数据
    • 由于可以读到其他未提交事务提交的数据,所以叫做脏读。
  • 读已提交(不可重复读)
    • 当前事务还没提交,但是可以读到其他已经提交的事务修改的数据
    • 由于可以读到其他事务已提交的数据,所以两次查询可能会产生不一样的结果。
  • 可重复读(幻读)
    • 如果事务A和事务B都在进行中,事务A在数据库中插入了一条主键为1的一条数据,并且结束事务;然后事务B查询数据库中不存在主键为1的数据,所以再次执行插入操作,发现逐渐冲突,这种现象类似于幻读
    • 由于事务只要不结束,多次查询的结果都是一样的,这就是可以重复读。
  • 串行化:事务排队执行,每次执行一个。

参考: 事务的4大特性、事务隔离级别、事务传播行为

三、传播机制

  • required(默认):如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务
  • requires_new:创建一个新事务,如果存在当前事务,则挂起该事务。
  • supports:当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行
  • mandatory:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常。
  • not_supported:始终以非事务方式执行,如果当前存在事务,则挂起当前事务
  • never:不使用事务,如果当前事务存在,则抛出异常
  • nested:如果当前事务存在,则在嵌套事务中执行,否则自己新建一个事务
    • 和requires_new的区别:requires_new是新建一个事务并且新开启的这个事务与原有事务无关,而nested是当前存在事务时(我们把当前事务称之为父事务)会开启一个嵌套事务(称之为一个子事务)。在nested情况下父事务回滚时,子事务也会回滚,而在requires_new情况下,原有事务回滚,不会影响新开启的事务。
    • 和required的区别:required情况下,调用方存在事务时,则被调用方和调用方使用同一事务,那么被调用方出现异常时,由于共用一个事务,所以无论调用方是否catch其异常,事务都会回滚;而在nested情况下,被调用方发生异常时,调用方可以catch其异常,这样只有子事务回滚,父事务不受影响。

参考: 带你读懂Spring 事务——事务的传播机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

effective c++ 笔记 条款26-31

条款 26:尽可能延后变量定义式出现的时间 应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止,以此避免构造(和析构)非必要对象,还可以避免…

c++笔记理解

1.封装 (1)构造函数不是必须在的 可以通过行为修改属性 (2)private和protected区别在于继承那里要学 (3)类默认是私有,struct是共有 私有的好处:控制数据的有效性,意…

编程笔记 Golang基础 012 项目构建

编程笔记 Golang基础 012 项目构建 一、模块(Module)、包(Package)和文件二、项目结构三、VsCode项目管理四、Goland项目管理五、工作空间小结 如何构建和组织一个项目,是学习该语言编程的开始。 一、模块(…

MySQL 8.0.36 WorkBench安装

一、下载安装包 百度网盘链接:点击此处下载安装文件 提取码:hhwz 二、安装,跟着图片来 选择Custom,然后点Next 顺着左边框每一项的加号打开到每一个项的最底层,点击选中最底层的项目,再点击传过去右边的绿色箭头&a…

Codeforces Round 530 (Div. 2)

CF1099A Snowball 题目 有一个重量为 w 的雪球正在高度为 h 的地方向下滚动。每秒它的高度会减少 1。同时在高度 i 的位置它的重量会增加 i(包括初始位置) 同时在滚动的路线上有 2 块石头,第 i 块石头的高度为 hi​,即雪球会在 hi…

【论文阅读|基于 YOLO 的红外小目标检测的逆向范例】

基于 YOLO 的红外小目标检测的逆向范例 摘要1 引言2 相关工作2.1 逆向推理2.2 物体检测方法 3 方法3.1 总体架构3.2 逆向标准的可微分积分 4 实验4.1 数据集和指标4.2 实验环境4.4 OL-NFA 为少样本环境带来稳健性 5 结论 论文题目: A Contrario Paradigm for YOLO-b…

详解 leetcode_078. 合并K个升序链表.小顶堆实现

/*** 构造单链表节点*/ class ListNode{int value;//节点值ListNode next;//指向后继节点的引用public ListNode(){}public ListNode(int value){this.valuevalue;}public ListNode(int value,ListNode next){this.valuevalue;this.nextnext;} }package com.ag; import java.ut…

[树形DP] 最长乘积链

题目 1.最长乘积链 - 蓝桥云课 (lanqiao.cn) 初始思路 对问题进行分析,对每个点dfs去求走不同路的最远距离与次远距离求乘积,时间复杂度为O(n^2) 看了答案怎么弄的优化 解题思路 总的来说 预处理(对每个结点的信息进行统计&#xff09…

AWS无服务器直播解决方案

随着媒体系统的发展,越来越多的直播客户想要一个即开即用的平台,在不需要管理和运维底层资源的同时使用一站式的媒体平台。九河云对多家云厂商有所了解及有一定合作,下面将按客户的需求介绍aws的无服务器直播解决方案。 架构概述&#xff1a…

Flutter插件开发指南02: 事件订阅 EventChannel

Flutter插件开发指南02: 事件订阅 EventChannel 视频 https://www.bilibili.com/video/BV1zj411d7k4/ 前言 上一节我们讲了 Channel 通道,但是如果你是卫星定位业务,原生端主动推消息给 Flutter 这时候就要用到 EventChannel 通道了。 本节会写一个 1~…

HarmonyOS 权限 介绍

权限说明 权限等级 根据权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三种,等级依次提高。 normal权限 normal 权限允许应用访问超出默认规则外的普通系统资源。 这些系统资源的开放(包括数据和功能)对用户隐私以及…

Unity编辑器扩展之是否勾选Text组件BestFit选项工具(此篇教程也可以操作其他组件的属性)

想要批量化是否勾选项目预制体资源中Text组件BestFit属性(此篇教程也可以操作其他组件的属性,只不过需要修改其中对应的代码),可以采用以下步骤。 1、在项目的Editor文件中,新建一个名为TextBestFitBatchProcessor的…

日常遇到Maven出现依赖版本/缓存问题通用思路。

Maven依赖错误联想 明明自己的工程是直接从大佬哪里拉下来的,并且自己的setting文件也是没有问题,可是自己偏偏编译有问题。这里介绍一种通用解决方案,仅供参考。 前置排查确认 我遇到原因是在JDK升级过程中遇到的: java.lang.…

Linux篇:指令

一 基本常识: 1. 文件文件内容文件的属性 2. 文件的操作对文件内容的操作对文件属性的操作 3. 文件的类型: d:目录文件 -:普通文件 4. 指令是可执行程序,指令的代码文件在系统的某一个位置存在的。/u…

Linux---进程间通讯(上)

一、进程间通讯的目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件&#xff0…

pytorch使用文档

torch 张量操作(torch) torch.tensor(): 用数据创建一个 torch.Tensor 对象。torch.from_numpy(): 从 numpy 数组创建张量。torch.zeros(), torch.ones(), torch.rand(), torch.randn(): 创建具有特定形状的全0、全1、均匀分布随机、标准正态分布随机张…

css3实现无缝滚动,鼠标经过暂停

js也可以实现,但css3更加的平滑和资源占用更少。下面是具体代码,动画要单独用一个类名,否则暂停估计不会生效: 原理:动画向上移动,目标完全消失后,从头开始。js实现是获取消失的部分&#xff0…

分享10款自媒体人常用ai写作工具,总有一款适合你 #其他#AI写作

你是否因为写作困顿而感到沮丧?是不是希望能够找到一个能给你提供无限灵感和提高创作效率的利器?AI写作助手就是你的绝佳选择!现在我向大家推荐几款好用的AI写作助手,它们将让你的创作之旅更加流畅、富有创意。 1.七燕写作 这是一…

十二、通过色彩空间转换进行更换图片背景

项目功能实现&#xff1a;对一张白色背景的图片进行更换成蓝色背景&#xff0c;类似抠图更换背景操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 inrange.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class INRANGE{ public:v…

入门指南:Element UI 组件的安装及使用

随着前端开发技术的不断发展&#xff0c;越来越多的开发者选择使用现成的 UI 组件库来加速项目开发并提升用户体验。其中&#xff0c;Element UI 作为一款基于 Vue.js 的组件库&#xff0c;备受开发者们的青睐。本篇博客将为大家介绍如何安装并使用 Element UI 组件&#xff0c…