事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行

事务的特点

A(Atomicity)原子性:整个事务的操作保证原子性,要不都成功,要不都失败。
C(consistency)一致性:事务执行前后,数据库都要处于一致性状态。如果事务某个动作失败了,系统会自动撤销任务,以保证数据库的完整性约束。
I(isolation)隔离性:不同事务之间的操作不可见,但是不同的引擎在这个地方的实现是不一样的。
D(durability)持久性:提交之后将持久到磁盘。
持久性保证的是事务系统的可靠性(High Reliablity)。

  • 共享锁(读锁):其他事务可以读,但不能写。
    SELECT * FROM table_name WHERE … LOCK IN SHARE MODE。
    其他 session 仍然可以查询记录,并也可以对该记录加 share mode 的共享锁。

  • 排他锁(写锁):其他事务不能读取,也不能写。
    对于 UPDATE、 DELETE 和 INSERT 语句,InnoDB会自动加排他锁(X);
    SELECT * FROM table_name WHERE … FOR UPDATE。
    其他 session 可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁

不同粒度的锁

  • 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
    表级锁更适合于以查询为主,并发用户少,只有少量按索引条件更新数据的应用

  • 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
    最大程度的支持并发,同时也带来了最大的锁开销。基于索引来完成行锁

  • 页级锁:页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。
    表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级锁,一次锁定相邻的一组记录。

  • 间隙锁(Next-Key锁):当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;
    对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁。
    间隙锁的目的:防止幻读,以满足相关隔离级别的要求。

事务日志文件

  • Redo log :重做日志记录的是事务提交数据页的物理修改,用来实现事务的持久性,分为重做日志缓冲和重做日志文件,前者在内存中,后者在磁盘中。当事务提交后把所有修改信息都存到改日志文件中,用于在刷新脏页到磁盘发生错误时,进行数据恢复使用。
    在InnoDB存储引擎中,事务日志通过重做日志文件和InnoDB存储引擎的日志缓冲(redo log_buffer) 来实现。
    在系统宕机重启之后,对checkpoint之后的数据修改执行一遍redo,将事务的操作结果恢复过来,以此来保证之前事务的写操作的持久性

  • Undo log: 记录事务修改之前版本的数据信息
    undo与redo正好相反,对于数据库进行修改时,数据库不但会产生 redo,而且还会产生一定量的 undo。
    即使你执行的事务或语句由于某种原因失败了,或者如果你用一条 ROLLBACK语句请求回滚,就可以利用这些undo信息将数据回滚到修改之前的样子。
    undo log用来实现事务的原子性。
    用于记录数据被修改前的信息,作用:①提供回滚②MVCC(多版本并发控制)

undo Log是记录逻辑日志(redo log记录物理日志)
当delete一条记录时,undo log会记录一条对应的insert记录,
当update一条记录时,记录一条对应相反的update记录,
当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
Undo Log销毁:undo log在事务执行时产生,事物提交时,并不会立即删除undo log,因为这些日志可能会用于MVCC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91307.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91307.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91307.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastAPI入门:安装、Pydantic、并发和并行

本系列参考FastAPI官方文档:https://fastapi.tiangolo.com/zh/python-types/安装 使用pip安装: pip install fastapi此外还需要 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn。 ASGI服务器:异步服务网关接口,…

欢乐的周末 - 华为OD统一考试(JavaScript 题解)

题目描述 小华和小为是很要好的朋友,他们约定周末一起吃饭。 通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达)。 求小华和小为都能到达的聚餐地点有多少个? 输入描述 第一行输入m和n,m代表地图的长度,n代表地图的宽度 第二行…

算法竞赛阶段二-数据结构(38)数据结构动态链表list

动态链表(List)的基本概念动态链表是一种线性数据结构,通过节点间的指针连接实现动态内存分配。与数组不同,链表的大小可随需增减,插入和删除操作的时间复杂度为 O(1)(已知位置时),但…

Qt 移动应用推送通知实现

推送通知是移动应用提升用户粘性的核心功能——无论是即时消息提醒、活动推送还是状态更新,都需要通过推送功能触达用户。Qt虽未直接提供跨平台推送API,但可通过集成原生服务(如Firebase Cloud Messaging、Apple Push Notification service&a…

Word和WPS文字如何制作分栏试卷?想分几栏分几栏

使用Word和WPS文字制作试卷的时候,通常会使用A3大小的纸张,横向布局。但是如果题目的题干、问题、选项文字太少,会带来试卷上有较大的空白,既不美观又浪费纸,解决办法就是将试卷分栏,根据需要分成多栏&…

ubuntu 安装vmware tools

VMware Workstation菜单栏->虚拟机->安装VMware Tools 打开ubuntu内加载的光盘,复制VMwareTools-10.3.26-22085142.tar.gz,解压出来 sudo ./vmware-install.pl #执行安装软件 VMware Tools 安装完成以后重启Ubuntu,重启以后就可以直…

【实时Linux实战系列】在实时应用中进行负载均衡

在实时应用中,负载均衡是确保系统能够高效处理多个任务的关键技术。通过合理调度任务到不同的处理单元,负载均衡可以提高系统的整体性能,减少延迟,并提高资源利用率。在实时 Linux 系统中,负载均衡尤为重要&#xff0c…

bash的特性-命令和文件自动补全

一、前言在 Linux Shell 编程和日常使用中,Bash 的自动补全功能 是一个非常强大且实用的特性。它不仅可以节省输入时间,还能有效减少拼写错误,提升命令执行效率。本文将带你全面了解 Bash 的自动补全机制,包括:✅ 命令…

Ubuntu系统 系统盘和数据盘扩容具体操作

Linux磁盘配置和需求,以下是完整的操作方案: 可以看到系统盘vda3 还有48GB 数据盘则是还有512GB没有挂载使用,下面是完成数据扩容的具体操作 一、完成系统盘扩容(使用98GB空间) # 1. 扩展逻辑卷(LVM架构&am…

从0到1学Pandas(七):Pandas 在机器学习中的应用

目录一、数据预处理1.1 特征提取1.2 数据标准化与归一化1.3 特征编码二、特征工程2.1 特征选择​2.2 特征组合与衍生​2.3 缺失值处理策略​三、模型训练与评估3.1 数据集划分3.2 模型训练与预测3.3 模型评估与调优四、Pipeline 构建4.1 自动化工作流4.2 模型部署与应用4.3 模型…

LangChain和LangGraph 里面的 `create_react_agent`有什么不同

这两个函数虽然名称相同,但来自不同的库(LangChain 和 LangGraph),它们在实现和使用上有一些关键区别: 主要区别特性LangChain 的 create_react_agentLangGraph 的 create_react_agent所属库LangChainLangGraph设计目的…

PostgreSQL 与 Oracle 数据库字段类型的详细对比

一、数值类型对比数据类型OraclePostgreSQL说明整数NUMBER(p,0)SMALLINT/INT/BIGINTOracle 统一用 NUMBER,PG 区分精度范围浮点数BINARY_FLOATREAL单精度浮点双精度浮点BINARY_DOUBLEDOUBLE PRECISION双精度浮点高精度小数NUMBER(p,s)NUMERIC(p,s)精确数值存储自增序…

JVM 性能调优实战:让系统性能 “飞” 起来的核心策略

在 Java 应用的生命周期中,性能问题如同隐藏的 “暗礁”—— 初期可能不显眼,但随着用户量增长和业务复杂度提升,微小的性能损耗会被无限放大,最终导致系统响应迟缓、频繁卡顿甚至崩溃。JVM 性能调优的目标,就是通过优…

Android Handler 完全指南

在 Android 开发中,Handler 是线程通信的核心工具 —— 当你在子线程下载图片后需要更新 UI,当你在 TCP 连接中收到数据需要通知界面,当你需要延迟执行某个任务时,都会用到 Handler。这个看似简单的类,却蕴含着 Androi…

梳理Ego-Planner模式下5通道、6通道与无人机模式的关系

Copilot said: 你需要梳理Ego-Planner模式下5通道、6通道与无人机模式的关系,以及轨迹跟随、紧急情况和人工接管的流程。下面结合你的描述和三张图片,对核心逻辑进行总结和整理: --- ## 一、状态组合与对应模式(见图1)…

odbc和jdbc什么区别

ODBC 和 JDBC 都是用于连接和操作数据库的标准接口,但它们分别面向不同的编程语言和平台。下面是它们的区别与对比,帮助你理解它们的用途和适用场景。📊 一、基本概念对比特性ODBC(Open Database Connectivity)JDBC&am…

境外期货Level2高频Tick历史行情数据获取与应用指南

在金融量化分析中,本地数据的高效使用是提升策略效果的重要基础。本文以CSV格式的本地数据为核心,以外盘期货分钟数据、CME/COMEX/CBOT历史行情为例,阐述专业化的数据处理与应用方法,为研究者提供可行性方案。一、数据预处理标准化…

迅为RK3588开发板安卓GPIO调用-APP运行测试

将网盘上的安卓工程文件复制到 Windows 电脑上。确保工程路径中使用英文字符,不包含中文。接着,启动 Android Studio,点击“Open”按钮选择应用工程文件夹,然后点击“OK”。由于下载 Gradle 和各种 Jar 包可能需要一段时间&#x…

以太坊下一阶段的关键——隐私

1. 引言 随着以太坊庆祝其十周年纪念,Aztec Labs 联合创始人兼 CEO Zac Williamson 和以太坊基金会 PSE 负责人 Sam Richards 表示,以太坊必须加强其对隐私的原始承诺。 以太坊庆祝十周年纪念,标志着智能合约、去中心化金融(DeF…

CTFpwn学习笔记1-栈溢出

栈溢出通过写入超出数组定义范围的字符长度达到溢出,从而覆盖栈上其余数据,覆盖返回地址约等于控制程序执行流例如:经过ida反编译后,发现这里要将v2的值修改为11.28125才能获得flag,同时我们可以发现这里使用了gets这个…