当前位置: 首页 > news >正文

【事务】怎么去理解事务?

1、什么是事务?

事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单元。

2、事务具有哪些特性?

一个逻辑工作单元要成为事务,在关系型数据库管理系统中,必须满足 4 个特性,即所谓的 ACID:原子性、一致性、隔离性和持久性。

  • 一致性:事务开始之前和事务结束之后,数据库的完整性限制未被破坏。
  • 原子性:事务的所有操作,要么全部完成,要么全部不完成,不会结束在某个中间环节。
  • 持久性:事务完成之后,事务所做的修改进行持久化保存,不会丢失。
  • 隔离性:当多个事务并发访问数据库中的同一数据时,所表现出来的相互关系。

在4 个特性中有 3 个与 WAL( WAL全称为Write-Ahead Logging,预写日志系统) 有关系,都需要通过 Redo、Undo 日志来保证等。

下面来说这几个特性:

一致性

首先来看一致性,一致性其实包括两部分内容,分别是约束一致性和数据一致性。

约束一致性:大家应该很容易想到数据库中创建表结构时所指定的外键、Check、唯一索引等约束。可惜在 MySQL 中,是不支持 Check 的,只支持另外两种,所以约束一致性就非常容易理解了。

数据一致性:是一个综合性的规定,或者说是一个把握全局的规定**。因为它是由原子性、持久性、隔离性共同保证的结果,而不是单单依赖于某一种技术。**

原子性

接下来看原子性,原子性就是前面提到的两个“要么”,即要么改了,要么没改。也就是说用户感受不到一个正在改的状态。MySQL 是通过 WAL(Write Ahead Log)技术来实现这种效果的。

可能你想问,原子性和 WAL 到底有什么关系呢?

其实关系非常大。举例来讲,如果事务提交了,那改了的数据就生效了,如果此时 Buffer Pool 的脏页没有刷盘,如何来保证改了的数据生效呢?就需要使用 Redo 日志恢复出来的数据。而如果事务没有提交,且 Buffer Pool 的脏页被刷盘了,那这个本不应该存在的数据如何消失呢?就需要通过 Undo 来实现了,Undo 又是通过 Redo 来保证的,所以最终原子性的保证还是靠 Redo 的 WAL 机制实现的。

持久性

再来看持久性。所谓持久性,就是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的操作或故障不应该对其有任何影响。前面已经讲到,事务的原子性可以保证一个事务要么全执行,要么全不执行的特性,这可以从逻辑上保证用户看不到中间的状态。

但持久性是如何保证的呢?一旦事务提交,通过原子性,即便是遇到宕机,也可以从逻辑上将数据找回来后再次写入物理存储空间,这样就从逻辑和物理两个方面保证了数据不会丢失,即保证了数据库的持久性。

隔离性

所谓隔离性,指的是一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对其他的并发事务是隔离的。锁和多版本控制就符合隔离性。

http://www.lryc.cn/news/66460.html

相关文章:

  • camunda流程变量如何使用
  • CMIP6:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度
  • 2023建筑设计师们有哪些好用的AI设计工具?
  • mysql主从复制与读写分离
  • 技术控,看这里,一款支持断点调试的数据科学工具
  • 论文导读 | 大语言模型上的精调策略
  • 进阶自动化测试,这3点你一定要知道的...
  • 网络编程套接字API
  • 数字藏品的价值和意义
  • Unity物理系统脚本编程(上)
  • Java基础(十七)File类与IO流
  • 跑步课程导入能力,助力科学训练
  • MySQL---8、创建和管理表
  • 图像分类简单介绍
  • 很多博主用Markdown格式文章?直呼真不错!
  • 【2023/05/07】汇编语言
  • AI 生成第3篇测试文章:怎么编写测试计划?
  • 怎么洗稿容易过稿-在线洗稿软件
  • 图书馆客流人数统计分析系统方案
  • linux命令之crontab详解
  • 浅谈一下接口工具(jmeter、postman、swagger等)
  • 面试题:react、 vue中的key有什么作用? (key的内部原理)
  • C++之继承
  • 轻松掌握!Pandas的数据添加技巧,3秒学会更高效的方法
  • 层次结构工程命名建议
  • Google Play应用广告该如何运作
  • Java版电子招投标系统源码之了解电子招标投标全流程
  • 能源设备智能维修AR远程作业指导平台降低运营成本
  • 【实验笔记】深度学习中的确定性Uncertainty in Deep Learning(资料汇总,不断更新)
  • 第七章 Bash 操作