数据库事物相关笔记

一、数据库的事物的基本特性

事物是区分文件存储系统与Nosql数据库重要特性之一,其存在的意义是为了保证即使在并发情况下也能正确的执行crud操作。怎样才算是正确的呢?这时提出了事物需要保证的四个特性即ACID:

  1. A: 原子性(atomicity)
    • 事物中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事物的失败;
  2. C: 一致性(consistency)
    • 事物结束后系统状态是一致的;
  3. I:  隔离性(isolation)
    • 并发执行的事物彼此无法看到对方的中间状态;
  4. D: 持久性(durability)
    • 事物完成后所做的改动都会被持久化,即使发生灾难性的失败。

在高并发的情况下,要完全保证其ACID特性是非常困难的,除非把所有的事物串行化执行,但带来的负面的影响将是性能大打折扣。很多时候我们有些业务对事物的要求是不一样的,所以数据库中设计了四种隔离级别,供用户基于业务进行选择。

二、数据库的事物的隔离级别

隔离级别

脏读(Dirty Read)

不可重复读(NonRepeatable Read)

幻读(Phantom Read)

未提交读(Read uncommitted)

可能

可能

可能

已提交读(Read committed)

不可能

可能

可能

可重复读(Repeatable read)

不可能

不可能

可能

可串行化(SERIALIZABLE)

不可能

不可能

不可能

 

脏读 :

一个事物读取到另一事物未提交的更新数据

不可重复读 :

在同一事物中,多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事物已提交的更新数据. 相反, “可重复读”在同一事物中多次读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事物已提交的更新数据。

幻读 :

 查询表中一条数据如果不存在就插入一条,并发的时候却发现,里面居然有两条相同的数据。这就幻读的问题。

 

数据库默认隔离级别:

Oracle中默认级别是 Read committed

mysql 中默认级别 Repeatable read。另外要注意的是mysql 执行一条查询语句默认是一个独立的事物,所以看上去效果跟Read committed一样。

# 查看mysql 的默认隔离级别

SELECT @@tx_isolation

 

三、事物的传播机制

 

 

类别

事物传播类型

说明

支持当前事物

PROPAGATION_REQUIRED

(必须的)

如果当前没有事物,就新建一个事物,如果已经存在一个事物中,加入到这个事物中。这是最常见的选择。

PROPAGATION_SUPPORTS

(支持)

支持当前事物,如果当前没有事物,就以非事物方式执行。

PROPAGATION_MANDATORY

(强制)

使用当前的事物,如果当前没有事物,就抛出异常。

不支持当前事物

PROPAGATION_REQUIRES_NEW

(隔离)

新建事物,如果当前存在事物,把当前事物挂起。

PROPAGATION_NOT_SUPPORTED

(不支持)

以非事物方式执行操作,如果当前存在事物,就把当前事物挂起。

PROPAGATION_NEVER

(强制非事物)

以非事物方式执行,如果当前存在事物,则抛出异常。

套事物

PROPAGATION_NESTED

(嵌套事物)

如果当前存在事物,则在嵌套事物内执行。如果当前没有事物,则执行与PROPAGATION_REQUIRED类似的操作。

常用事物传播机制:

  1. PROPAGATION_REQUIRED,
    • 这个也是默认的传播机制;
  2. PROPAGATION_NOT_SUPPORTED
    • 可以用于发送提示消息,站内信、短信、邮件提示等。不属于并且不应当影响主体业务逻辑,即使发送失败也不应该对主体业务逻辑回滚。
  3. PROPAGATION_REQUIRES_NEW
    • 总是新启一个事物,这个传播机制适用于不受父方法事物影响的操作,比如某些业务场景下需要记录业务日志,用于异步反查,那么不管主体业务逻辑是否完成,日志都需要记录下来,不能因为主体业务逻辑报错而丢失日志;

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

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

相关文章

[css] clear属性只对块级元素有效么?为何无法应用于行内元素?

[css] clear属性只对块级元素有效么?为何无法应用于行内元素? block元素浮动之后已经脱离了文档流了,排列的顺序都不一样了,所以清除了之后有效果。 inline-block还是在文档流里面,加浮动不加浮动都没有什么作用的&am…

GO语言-基础语法:条件判断

1. IF判断(aa.txt内容:asdfgh。bb.txt内容:12345) package mainimport ("io/ioutil""fmt" )func main() {const filename1, filename2 "aa.txt", "bb.txt"contents, err : ioutil.ReadFile(filename1) if err …

JVM模型学习笔记

JVM由三个主要的子系统构成 1. 运行时数据区(内存结构): 运行时数据区也是JVM的核心部分 内存数据区又分:堆、java栈、本地方法栈、程序计数器、方法区 1.1 本地方法栈(线程私有): 登记native方法,在Execution Eng…

[css] css的负边距有哪些应用场景?

[css] css的负边距有哪些应用场景? 垂直水平居中 通过伪元素扩大元素覆盖范围个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

tomcat 设置虚拟路径的4种方法

通常使用方法1或者方法2 方法1 (添加配置文件):推荐使用,不需要重启服务器 在Tomcat根目录下的/conf/Catalina/localhost/ 路径下新建一个filename.xml,并在该xml中编写语句 即可创建虚拟站点,虚拟站点名为…

sharding-sphere按月动态分表

公司有个记录表,每天有几百万的数据,所以我决定按月把他分下表。 用spring整合的。 首先,sharding-sphere不支持自动创建表,所以我提前创建了两年的表,命名规则 logicTableName _2019_06 以下是官方文档上面的分片…

[css] 你了解CSS Houdini吗?说说它的运用场景有哪些?

[css] 你了解CSS Houdini吗?说说它的运用场景有哪些? Houdini是一组底层API,它们公开了CSS引擎的各个部分,从而使开发人员能够通过加入浏览器渲染引擎的样式和布局过程来扩展CSS。 Houdini是一组API,它们使开发人员可…

python 入门学习

把sublime编辑的.py文件保存在本地,在当前目录下输入 1 python hello.py 即可运行该程序,一定要在当前目录下运行。如果当前目录下没有该文件则不能成功运行。 其中cmd黑窗口下有这么几个快捷键, c: 进入另一个盘 dir 显示当前目录 tab 进…

[css] 列举一些你认为最“昂贵”的css属性并解释为什么

[css] 表列举一些你认为最“昂贵”的css属性并解释为什么 filter 吧,学过高斯模糊算法的表示头疼个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

大厂Java岗面试心得记录

最近裸辞,面了几家大厂,offer率高达100% 哈哈,然后发现选公司也是一件难事。 废话不多说,分享一下,我遇到的面试题,大概有以下这些: JVM: 1.JVM有哪些区域? 2.堆和栈分别说说内部东…

原生Js 两种方法实现页面关键字高亮显示

方法一 依靠正则表达式修改 1.获取obj的html 2.统一替换html标签 3.替换要修改的关键字 4.再把html标签修改回去 不足就是如果查找的关键字跟替换的标签一样就有冲突了 <!DOCTYPE HTML> <html lang"en"> <meta http-equiv"Content-Type" co…

[css] 为什么说css的选择器是从右向左匹配?

[css] 为什么说css的选择器是从右向左匹配&#xff1f; 从右往左匹配会首先排除很多错误的匹配&#xff0c;打个简单的比方&#xff0c;孩子只有一个父亲&#xff0c;但是父亲可以有很多个孩子&#xff0c;从孩子找父亲简单&#xff0c;从父亲找某个指定的孩子可能就会找到错误…

SpringBoot启动报错java.nio.charset.MalformedInputException: Input length = 2解决方案

最近新搭的一个项目&#xff0c;启动时&#xff0c;会报MalformedInputException这个异常&#xff0c; 百度了很久&#xff0c;网上说的千篇一律&#xff0c; 有的说&#xff0c;把yml复制到txt再复制回来 有的说&#xff0c;设置eclipse的utf-8环境 这些根本没有根治这个问…

IDEA主题设置与eclipse代码风格一致

习惯了用eclipse的你&#xff0c;是不是转到用idea特别不习惯&#xff0c;没有关系&#xff0c; 我们可以把idea的代码风格改成eclipse的&#xff0c;快捷键也换成eclipse的。 下载这个jar包&#xff0c;导入settings文件即可 下载地址 : https://download.csdn.net/download…

bash shell 中时间操作常用方法总结

在日常的工作中&#xff0c;bash shell 的时间操作非常频繁。比如shell脚本定时发送数据统计的时候&#xff0c;会查看当前是否为预定的发送时间。或者使用文件保存一些数据时&#xff0c;一般会生成时间字符串当做文件名的一部分。总结一下&#xff0c;以后再用到就不用上网到…

[css] 使用css实现一个loading的效果

[css] 使用css实现一个loading的效果 <div class"donut"></div> Keyframes donut-spin {0% {transform: rotate(0deg);}100% {transform: rotate(360deg);} }.donut {display: inline-block;border: 4px solid rgba(0, 0, 0, 0.1);border-left-color: #…

浅谈分布式锁

概述 为了防止分布式系统中的多个进程之间相互干扰&#xff0c;我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。 为什么要使用分布式锁 成员变量 A 存在 JVM1、JVM2、JVM3 三个 JVM 内存中 成员变量 A 同时都会在 JVM …

机器学习模型评估指标总结

常用机器学习算法包括分类、回归、聚类等几大类型&#xff0c;以下针对不同模型总结其评估指标 一、分类模型 常见的分类模型包括&#xff1a;逻辑回归、决策树、朴素贝叶斯、SVM、神经网络等&#xff0c;模型评估指标包括以下几种&#xff1a; &#xff08;1&#xff09;二分类…

[css] 说说sroll-snap-type属性的运用场景有哪些?相关联的属性还有哪些?

[css] 说说sroll-snap-type属性的运用场景有哪些&#xff1f;相关联的属性还有哪些&#xff1f; 使用 sroll-snap-type 优化滚动 根据 CSS Scroll Snap Module Level 1 规范&#xff0c;CSS 新增了一批能够控制滚动的属性&#xff0c;让滚动能够在仅仅通过 CSS 的控制下&#…

shell脚本一键同时推送代码至github和gitee

自己写的东西&#xff0c;要同时推送多个git地址&#xff0c;解决办法如下: 1.先要初始化你的git 进入自己的项目目录&#xff0c;然后执行 git init cd /app/code/go-study git init 2.执行以下脚本: #!/bin/bash #author Oliver #since 2020-09-03 15:24:31git remote rm …