事务的隔离级别和传播行为

news/2024/11/9 1:45:45/

什么是事务?
事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);

事务的四大特性:原子性,一致性,隔离性,持续性。
1 、原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性
事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
3 、隔离性
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
4 、持续性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

事务的隔离级别。
第一种隔离级别:Read uncommitted(读未提交)

解决了更新丢失,但还是可能会出现脏读

第二种隔离级别:Read committed(读提交)

解决了更新丢失和脏读问题

第三种隔离级别:Repeatable read(可重复读取)

解决了更新丢失、脏读、不可重复读、但是还会出现幻读

第四种隔离级别:Serializable(可序化)

解决了更新丢失、脏读、不可重复读、幻读(虚读)

四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低,像Serializeble这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况来,在MYSQL数据库中默认的隔离级别是Repeatable read(可重复读)。

在MYSQL数据库中,支持上面四种隔离级别,默认的为Repeatable read(可重复读);而在Oracle数据库中,只支持Serializeble(串行化)级别和Read committed(读已提交)这两种级别,其中默认的为Read committed级别。

事务的传播行为
1.什么是事务的传播行为?

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。

2.事务的7种传播行为:required / supports / mandatory / requires_new / not supported / never / nested

PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,这是最常见的选择,也是Spring默认的事务传播行为。(required需要,没有新建,有加入)。
PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。(supports支持,有则加入,没有就不管了,非事务运行)。
PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。(mandatory强制性,有则加入,没有异常)。
PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。(requires_new需要新的,不管有没有,直接创建新事务)。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。(not supported不支持事务,存在就挂起)。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。(never不支持事务,存在就异常)。
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。(nested存在就在嵌套的执行,没有就找是否存在外面的事务,有则加入,没有则新建)。


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

相关文章

JavaWeb——synchronized详解

目录 一、特性 1、互斥性 2、不可中断性 3、可重入性 二、使用 1、修饰普通方法 2、修饰静态方法 3、修饰代码块 三、锁机制 一、特性 1、互斥性 当线程进入synchronized修饰的代码块时,就相当于加锁。当线程退出synchronized修饰的代码块时,就…

恒生电子面试题总结

CPU突然飙升,如何排查 1.监控cpu运行状态,显示进程运行信息列表 top -c 2. 按CPU使用率排序,键入大写的P P 3.用 top -Hp 命令查看占用 CPU 最高的线程 上一步用 top命令找到了那个 Java 进程。那一个进程中有那么多线程,不可…

Flutter 路由

前言: 路由的核心就是一个路由映射表,比如login 映射到 LoginPage,有了这样的映射,就可以根据名字去找寻对应的页面。 在Flutter 中,路由管理主要有两个类 Route 和 Navigator 一 Route 在Flutter 中,一个页面要想…

【2404. 出现最频繁的偶数元素】

来源:力扣(LeetCode) 描述: 给你一个整数数组 nums ,返回出现最频繁的偶数元素。 如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1 。 示例 1&#xff1…

https是什么?

HTTPS(HyperText Transfer Protocol Secure)是基于HTTP协议的安全版本,它使用SSL/TLS协议对数据进行加密和身份验证,从而保证通信的安全性和完整性。 HTTPS和HTTP的区别: 安全性:HTTPS通过SSL/TLS协议对数…

对数据库中索引及索引的数据结构的理解

索引就像是书或者论文的目录, 通过目录能够快速定位到某一章节, 加快了查找的效率, 减少插入和删除操作; 那么知道索引是干啥的了, 那索引的底层数据结构是什么呢??? 索引1 简述2 索引考虑的数据结构1 简述 如果数据库中没有索引, 查找的时候就会遍历整个表; 如果针对的是顺…

科普:java与C++的区别

Java与C是两种广泛使用的编程语言,它们在某些方面存在不同之处。本文将详细介绍Java与C的区别。 一、C与Java的历史 C语言是由Bjarne Stroustrup在20世纪80年代初期开发的一种面向对象编程语言,它是C语言的扩展。Java语言是由Sun Microsystems公司于20…

Python pandas和numpy用法参考(转)

以下是转载:Python pandas用法 - 简书介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处...https://www.jianshu.com/p/840ba1…