事务的特性ACID、隔离级别
1.事务特性ACID
1.1 事务的四大特性
1、原子性(Atomicity)
事务包装的一组sql,要么都执行成功,要么都失败。这些操作是不可分割的。
2、一致性(Consistency)
数据库的数据状态是一致的。
3、持久性:(Durability)
事务成功提交之后,对于数据库的改变是永久的。哪怕数据库发生异常,重启之后数据亦然存在。
4、隔离性(Isolation)
一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
1.2 一致性和原子性的区别
一致性是保证整个操作成功或失败是符合预期的,原子性,隔离性,持久性这三个特性是为了约束事务最终实现数据的一致性。一致性和原子性的区别是:一致性强调的最终状态,要么是初始状态(事务回滚),要么是最终状态(任务成功执行完成);原子性强调的是操作的完整性,连续的操作不可分割,要么全部成功,要么全部失败。
举例:张三给李四转账100元。那数据库假设需要 张三扣100,李四加100,记录一条流水。如果流水没记录成功,那整体回滚,张三也没转账成功,李四也没多钱。这就是原子性的体现。而张三必须扣100,李四必须加100,这个就是一致性了,如果因为某些逻辑原因,导致张三扣了100,流水记录100转账,而李四只加了60。然后这3条操作都成功了,那原子性就符合了,但是一致性就不符合了。
2.事务的隔离级别
2.1 事务并发问题
1、脏读(最严重,杜绝发生)
指一个事务读取了另外一个事务 未提交的数据。
2、不可重复读
在一个事务内多次读取表中的数据,第一次未修改,第二次修改了,多次读取的结果不同(强调的是数据内容的变化)
3、幻读(虚读)
在一个事务内多次读取表中的数据,第一次未增删,第二次增删了,多次读取的结果不同。(强调的是数据数量的变化)
2.2 隔离级别
1.read uncommitted 读未提交,一个事务读到另一个事务没有提交的数据。
存在:3个问题(脏读、不可重复读、虚读)。
解决:0个问题
2.read committed 读已提交,一个事务读到另一个事务已经提交的数据。
存在:2个问题(不可重复读、虚读)。
解决:1个问题(脏读),通过在写的时候加锁,可以解决脏读。
3.repeatable read :可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。
存在:1个问题(虚读)。
解决:2个问题(脏读、不可重复读),通过在读的时候加锁,可以解决不可重复读。
4.serializable :串行化,同时只能执行一个事务,相当于事务中的单线程。
存在:0个问题。
解决:3个问题(脏读、不可重复读、虚读),通过串行化,可以解决虚读。
安全和性能对比
安全性:serializable > repeatable read > read committed > read uncommitted
性能 : serializable < repeatable read < read committed < read uncommitted
常见数据库的默认隔离级别:
MySql:repeatable read
Oracle:read committed
事务的特性ACID、隔离级别的更多相关文章
- Java数据库事务四大特性以及隔离级别
四大特性ACID 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.失败回滚的操作事务,将不能对数据库有任何影响 一致性(Consistency) 一致性是指事 ...
- 粗谈MySQL事务的特性和隔离级别
网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言 此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能 ...
- 【MySQL】:事务四大特性与隔离级别
目录 一.事务的概念 二.事务的四大特性 1.原子性 2.一致性 3.隔离性 4.持续性 三.事务语句 1.开启事务:start transaction 2.事务回滚:rollback 指定回滚点 3 ...
- spring 事务传播特性 和隔离级别
事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...
- 【JAVAWEB学习笔记】19_事务概述、操作、特性和隔离级别
事务 学习目标 案例-完成转账 一.事务概述 1.什么是事务 一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败 就是将n个组成单元放到一个事务中 2.mysql的事务 默认的 ...
- MySQL——事务ACID&隔离级别
数据库事务ACID&隔离级别 什么是事务 事务是用户定义的一个数据库操作序列.这些操作要么全执行,要么全不执行,是一个不可分割的工作单元.在关系型数据库中,事务可以是一条SQL语句,也可以是一 ...
- 一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1 .mysql索引结构,各自的优劣 2 .索引的设计原则 3 .mysql锁的类型有哪些 4 .mysql执行计划怎么看 ...
- 事务及其特性ACID
一.事务的定义 事务是一组单元化的操作,这组操作可以保证要么全部成功,要么全部失败(只要有一个失败的操作,就会把其他已经成功的操作回滚). 一般所说的数据库事务,它是访问并可能更新数据库中各种数据项的 ...
- 对事务的特性ACID的理解
对事务的特性ACID的理解 数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性).Consistensy(一致性).Isolation(隔离型)和Durability(持久性) ...
- 数据库 事务的特性ACID
数据库 事务的特性ACID 事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐 ...
随机推荐
- JSP+SSM+Mysql实现的图书馆预约占座管理系统
项目简介 项目来源于:https://gitee.com/gepanjiang/LibrarySeats 因原gitee仓库无数据库文件且存在水印,经过本人修改,现将该仓库重新上传至个人gitee仓库 ...
- Java中的集合(七)双列集合顶层接口------Map接口架构
Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...
- Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞复现
0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...
- 说了这么多次 I/O,但你知道它的原理么
O 软件目标 设备独立性 现在让我们转向对 I/O 软件的研究,I/O 软件设计一个很重要的目标就是设备独立性(device independence).啥意思呢?这意味着我们能够编写访问任何设备的应 ...
- Chisel3 - util - Pipe
https://mp.weixin.qq.com/s/WeFesE8k0ORxlaNfLvDzgg 流水线,用于添加延迟. 参考链接: https://github.com/freechips ...
- Java实现 LeetCode 808 分汤 (暴力模拟)
808. 分汤 有 A 和 B 两种类型的汤.一开始每种类型的汤有 N 毫升.有四种分配操作: 提供 100ml 的汤A 和 0ml 的汤B. 提供 75ml 的汤A 和 25ml 的汤B. 提供 5 ...
- Java实现 蓝桥杯VIP 算法训练 暗恋
算法训练 暗恋 时间限制:1.0s 内存限制:256.0MB 问题描述 同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事.暗恋,是他唯一能做的事.他只能在每天课间操的时候,望望她的位置 ...
- Java实现 蓝桥杯VIP 算法训练 幂方分解
问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步 ...
- Java中lang包的常用方法介绍
JAVA API(图片来源:实验楼) 包装类 Integer包装类 方法 返回值 功能描述 byteValue() byte 以 byte 类型返回该 Integer 的值 intValue() in ...
- Java实现打印回型嵌套
*********** * * * ******* * * * * * * * *** * * * * * * * * * * *** * * * * * * * ******* * * * **** ...