事务是什么?事务有什么特点?

简介: 简介:事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。

简介:事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。事务一般都是与数据库打交道的操作.

  • 4大特性
  • 4种隔离级别
  • 7种传播行为

事务的ACID属性##

  • 原子性(Atomicity):原子在化学中,是最小单位,不可以再分割了.事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行。(commit/rollback)
  • 一致性(Consistency):包装数据的完整性.事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏)事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
  • 隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
  • 持久性(Durability):
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响,该修改即使出现系统故障也将一直保持。
数据库事务4种隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

img_8b0366b934afffc10fe5e694a45c7695.png

1. ISOLATION_READ_UNCOMMITTED(读取未提交内容):这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
(1)所有事务都可以看到其他未提交事务的执行结果
(2)本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少
(3)该级别引发的问题是——脏读(Dirty Read):读取到了未提交的数据
2. ISOLATION_READ_COMMITTED(读取提交内容):保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
(1)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)
(2)它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变
(3)这种隔离级别出现的问题是——不可重复读(Nonrepeatable Read):不可重复读意味着我们在同一个事务中执行完全相同的select语句时可能看到不一样的结果。
导致这种情况的原因可能有:
1).有一个交叉的事务有新的commit,导致了数据的改变;
2).一个数据库被多个实例操作时,同一事务的其他实例在该实例处理其间可能会有新的commit
3. ISOLATION_REPEATABLE_READ(可重读):这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
(1)这是MySQL的默认事务隔离级别
(2)它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行
(3)此级别可能出现的问题——幻读(Phantom Read):当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行
(4)InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题
4. ISOLATION_SERIALIZABLE(可串行化):这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
(1)这是最高的隔离级别
(2)它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。
(3)在这个级别,可能导致大量的超时现象和锁竞争

7种传播行为

1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘

3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。

5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

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

img_2373319e0d9d86d8d9bf7bb42472cc10.png
目录
相关文章
|
10月前
|
机器学习/深度学习 供应链 算法
量子计算:从理论到实践的跨越
量子计算基于量子力学原理,利用量子比特的叠加态和纠缠特性,展现出远超经典计算机的计算能力。本文从基本概念、发展历程、应用场景及未来挑战四个方面,全面介绍量子计算从理论到实践的跨越,展望其在优化问题、量子化学、机器学习等领域的广泛应用前景。
|
安全 JavaScript 前端开发
深入理解Python中的try-except语句,避免代码崩溃的噩梦
深入理解Python中的try-except语句,避免代码崩溃的噩梦
360 0
|
IDE 数据可视化 架构师
何为低代码?何为高代码?
何为低代码?何为高代码?
718 0
|
弹性计算 安全 关系型数据库
2023年购买阿里云服务器、注册域名、备案及绑定教程参考(图文教程)
本文根据阿里云2023年的云服务器购买和注册域名及备案等相关政策和活动,为大家展示了2023年阿里云服务器的购买流程,域名注册、绑定以及备案教程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
3549 1
2023年购买阿里云服务器、注册域名、备案及绑定教程参考(图文教程)
|
存储 JavaScript 前端开发
一个登录案例学会 Pinia
经过初步体验,发现相比于 Vuex,Pinia 确实有了很大进步,最明显的就是删减了复杂的概念,简化了数据流转的过程,现在只剩下了 store、state、getters、actions 这四个核心概念。接下来使用一个用户登录的案例,来学习 Pinia 的使用。
1756 1
|
机器学习/深度学习 人工智能 编解码
VideoMAE:简单高效的视频自监督预训练新范式|NeurIPS 2022(2)
VideoMAE:简单高效的视频自监督预训练新范式|NeurIPS 2022
636 0
|
开发工具
笔记本intel WIFI6 AX201 160Mhz无线网卡出现错误代码10
笔记本intel WIFI6 AX201 160Mhz无线网卡出现错误代码10
6828 0
笔记本intel WIFI6 AX201 160Mhz无线网卡出现错误代码10
|
存储 缓存 5G
拖不得了,Android11真的来了,最全适配实践指南奉上(上)
没错!Android 11(version 30,Andorid R) 正式发布了!看到这个新闻我知道我不能再拖了,再不好好准备好迎接Android11的到来,到时候迎接我的就是客户的指责,甚至老板的一封休书了 😂
1074 0
拖不得了,Android11真的来了,最全适配实践指南奉上(上)
|
存储 机器学习/深度学习 算法
拉开你和别人的距离,只差 Contrastive Learning 这一步
作者提出了 Momentum Contrast 的概念,另外为无监督对比损失函数构建了足够大且具有高度一致性的字典,并通过队列 (queue) 的数据结构进行维护,下图即为 MoCo 论文思路的示意图,动量编码器以及通过队列存储特征向量,便是该文章两大最主要的特点了。
590 0
拉开你和别人的距离,只差 Contrastive Learning 这一步
|
存储 缓存 运维
从零开始入门 K8s | 调度器的调度流程和算法介绍
Kubernetes 作为当下最流行的容器自动化运维平台,以声明式实现了灵活的容器编排,本文以 v1.16 版本为基础详细介绍了 K8s 的基本调度框架、流程,以及主要的过滤器、Score 算法实现等,并介绍了两种方式用于实现自定义调度能力。
从零开始入门 K8s | 调度器的调度流程和算法介绍