数据库事务ACID特性及隔离级别
数据库ACID特性介绍
1、原子性(Atomic)
一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。
回滚是一个抽象概念,大多数数据库在实现事务时是在事务操作的数据快照上进行,并不修改实际的数据,发生错误时并不提交。
2、 一致性(Consistency)
一致性是指事务使得系统从一个一致性的状态转换到另一个一致性的状态。在实际的工程项目中事务可以有不同程度的一致性:
强一致性:读操作可以立即读到提交的更新数据。
弱一致性:提交的更新操作,不一定立即会被读操作读到,这种情况存在不一致窗口,指的是读操作要延迟一定时间才能读到最新值。
最终一致性:弱一致性的特例。事务更新一份数据,最终一致性保证在没有其他事务更新同样的值的话,最终所有的事务都会读到之前事务更新的最新值。如果没有错误发生,不一致窗口的大小依赖于通信延迟、系统负载等。
其他一致性变体还有:
单调一致性:如果一个进程已经读到一个值,那么后续不会读到更早的值。
会话一致性:保证客户端和服务器交互的会话过程中,读操作可以读到更新操作后的最新值。
3、隔离性(Isolation)
一个事务所做的修改在最终提交以前对其他事务是不可见的。
4、持久性(Durability)
一旦事务提交,则所做的修改会永久保存在数据库中。
四种事务隔离级别
1、Read Uncommitted(未提交读)
最低隔离级别。事务可以读取到未提交的数据,也即脏读(Dirty read)。存在脏读、不可重复读、幻读的问题。实际应用中一般很少使用这个隔离级别。
2、Read Committed(提交读)
大多数数据库系统默认的隔离级别(mysql不是)。只有在事务提交后,其更新结果才会被其他事务看见。该级别也叫 不可重复读(nonrepeatable read),两次执行同样的查询语句可能得到不同的结果。可以解决脏读问题,存在不可重复读、幻读的问题。
不可重复读发生的一个场景:事务A需要多次读取同一个数据,当再次读取该数据的时候 另一个事务B修改了该数据,导致事务A读到的该数据 与 上一次读到的数据不一致。(侧重在数据被修改了update)
3、Repeated Read(可重复读)
mysql默认的事务隔离级别。在同一个事务中多次读取同样记录的结果总是一致的。可以解决脏读、不可重复读,存在幻读(Phantom read)问题。幻读指的是当某个事务在读取某个范围内的记录时,会产生幻行(Phantom Rows)。
幻读发生的一个场景:select检测某数据是否存在,当不存在时插入数据,但在执行insert 语句插入数据时发现此记录已经存在了,不能再插入,此时即发生了幻读。
另一个场景:事务A执行 select语句1 返回 5条记录,再次执行 select语句1 时返回了 6条 记录,也即与上次返回的结果集不一致。(侧重在插入了新数据insert)
InnoDB引擎通过使用 NK锁(Next-Key Locks)解决幻读问题。
4、Serialization(可串行化)
事务串行化执行,隔离级别最高,牺牲了系统的并发性。解决脏读、不可重复读、幻读,可保证事务安全。通过强制事务串行执行避免了幻读问题,它在读取的每一行数据上都加锁,会导致大量的超时和锁争用问题。实际应用中很少使用这个隔离级别。
备注
不可重复读的重点于在修改:
同样的检索条件读取数据, 再次读取出来时发现值不一致。
幻读的重点在于新增或者删除
同样的条件, 第 1 次和第 2 次读出来的记录数不一样。
数据库事务ACID特性及隔离级别的更多相关文章
- Java数据库事务四大特性以及隔离级别
四大特性ACID 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.失败回滚的操作事务,将不能对数据库有任何影响 一致性(Consistency) 一致性是指事 ...
- 数据库事务ACID特性(原子性、一致性、隔离性、持久性)
ACID特性: 原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability) 原子性:一个事务必须被视为一个不可分割的最小工作单元,整个 ...
- 粗谈MySQL事务的特性和隔离级别
网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言 此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能 ...
- 【MySQL】:事务四大特性与隔离级别
目录 一.事务的概念 二.事务的四大特性 1.原子性 2.一致性 3.隔离性 4.持续性 三.事务语句 1.开启事务:start transaction 2.事务回滚:rollback 指定回滚点 3 ...
- spring 事务传播特性 和隔离级别
事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...
- MVCC原理 4步 什么是MVCC、事务ACID、事物隔离级别、Innodb存储引擎是如何实现MVCC的
MVCC是来处理并发的问题,提高并发的访问效率,读不阻塞写.事物A 原子性C 一致性I 隔离性D 持久性高并发的场景下的问题脏读不可重复读幻读事物隔离级别RU读未提交 脏读/不可重复读/幻读 .不适用 ...
- Spring支持的常用数据库事务传播属性和隔离级别
事务的四大特征:原子性,隔离性,持久性,一致性 spring提供了7种事务传播属性: 一个事务与其他事务的隔离程度称为隔离级别.不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性 ...
- 数据库事务 ACID属性、数据库并发问题和四种隔离级别
数据库事务 ACID属性.数据库并发问题和四种隔离级别 数据库事务 数据库事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态 一组逻辑操作单元:一个或多个DML操作 事务处理原则 保证所有事务都 ...
- 【JAVAWEB学习笔记】19_事务概述、操作、特性和隔离级别
事务 学习目标 案例-完成转账 一.事务概述 1.什么是事务 一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败 就是将n个组成单元放到一个事务中 2.mysql的事务 默认的 ...
随机推荐
- 【PyQt5 学习记录】001:第一个界面
PyQt5 的安装很简单: pip3 install PyQt5 然后就是写一个最简单的界面试试手: import sys from PyQt5.QtWidgets import QApplicati ...
- 已注册成Portal联合服务器的Server,如何修改机器名?
1.产品版本 ArcGIS for Server 10.2.2 2.修改说明 本环境中,Portal for ArcGIS和ArcGIS for Server两个产品安装在同一台机器上.安装前已将完全 ...
- 毕向东_Java基础视频教程第19天_IO流(20~22)
第19天-20-IO流(改变标准输入输出设备) static void setIn(InputStream in) Reassigns the "standard" input s ...
- 使用自定义视图的AlertDialog
使用自定义视图的AlertDialog主要分为以下几个步骤: 1)利用XML文件构建自己的的视图 2)将视图添加到AlertDialog中 * 在进行第二步之前,有时需要对对话框窗口进行额外的设置 下 ...
- C#字节流通信格式
类似通信格式的实现关键点: byte数组转float的实现,BitConvetor.toSingle() float类型转by,BitConverter.GetBytes #客户端发送public b ...
- vue从安装到初始化项目
- 打通版微社区(3):在Web服务器上部署memcache For DZ3.2
写在前面:首先这个数据库加速程序的原理,是将数据库内容缓存到Web服务器的内存上,也就是内存换速度.我本次微社区的应用其实应该用不了这个,只是看到好多DZ论坛部署的都安装了这个,我就练手一下以便不时之 ...
- CAShapeLayer的使用[2]
CAShapeLayer的使用[2] CAShapeLayer支持的动画类型有如下这些. ------------------------------------------------------- ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- Python学习---深入编码学习1225
1.1. Python2 Py2中只有2中数据类型,Str和Unicode,而且str中保存的是bytes,Unicode中保存的是unicode 一切我们能看到的明文都是unicode数据类型, b ...