数据库事务概述

news2024/11/26 13:45:53

1.1 存储引擎支持情况

SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。 能看出在 MySQL 中,只有 InnoDB 是支持事务的。

1.2 基本概念

事务: 一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务处理的原则: 保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交( commit ) ,那么这些修改就 永久 地保 存下来;要么数据库管理系统将 放弃 所作的所有 修改 ,整个事务回滚 ( rollback ) 到最初状态。

 

1.3 事务的ACID特性

原子性( atomicity ):
原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。
一致性( consistency ):
(国内很多网站上对一致性的阐述有误,具体你可以参考 Wikipedia Consistency 的阐述)
根据定义,一致性是指事务执行前后,数据从一个 合法性状态 变换到另外一个 合法性状态 。这种状态 是 语义上 的而不是语法上的,跟具体的业务有关。
那什么是合法的数据状态呢?满足 预定的约束 的状态就叫做合法的状态。通俗一点,这状态是由你自己来定义的(比如满足现实世界中的约束)。满足这个状态,数据就是一致的,不满足这个状态,数据就是不一致的!如果事务中的某个操作失败了,系统就会自动撤销当前正在执行的事务,返回到事务操作之前的状态。

 

隔离型(isolation):

事务的隔离性是指一个事务的执行 不能被其他事务干扰 ,即一个事务内部的操作及使用的数据对 并发 的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

如果无法保证隔离性会怎么样?假设 A 账户有 200 元, B 账户 0 元。 A 账户往 B 账户转账两次,每次金额为 50元,分别在两个事务中执行。如果无法保证隔离性,会出现下面的情形:

UPDATE accounts SET money = money - 50  WHERE NAME = 'AA';

UPDATE accounts SET money = money + 50 WHERE NAME = 'BB' ;

 

持久性( durability ):
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是 永久性的 ,接下来的其他操作和数据库故障不应该对其有任何影响。
持久性是通过 事务日志 来保证的。日志包括了 重做日志 回滚日志 。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性 

1.4 事务的状态

我们现在知道 事务 是一个抽象的概念,它其实对应着一个或多个数据库操作, MySQL 根据这些操作所执行的不同阶段把 事务 大致划分成几个状态:
活动的( active
事务对应的数据库操作正在执行过程中时,我们就说该事务处在 活动的 状态。
部分提交的( partially committed
当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并 没有刷新到磁盘 时,我们就说该事务处在 部分提交的 状态。
失败的( failed
当事务处在 活动的 或者 部分提交的 状态时,可能遇到了某些错误(数据库自身的错误、操作系统
错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处在 失败的 状态。
中止的( aborted
如果事务执行了一部分而变为 失败的 状态,那么就需要把已经修改的事务中的操作还原到事务执
行前的状态。换句话说,就是要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称
之为 回滚 。当 回滚 操作执行完毕时,也就是数据库恢复到了执行事务之前的状态,我们就说该事
务处在了 中止的 状态。
举例:
UPDATE accounts SET money = money - 50 WHERE NAME = 'AA' ;
UPDATE accounts SET money = money + 50 WHERE NAME = 'BB' ;
提交的( committed
当一个处在 部分提交的 状态的事务将修改过的数据都 同步到磁盘 上之后,我们就可以说该事务处
在了 提交的 状态。
一个基本的状态转换图如下所示:

 

 图中可见, 只有当事务处于提交的或者中止的状态时, 一个事务的生命周期才算是结束了. 对于已经提交的事物来说, 该事务对数据库所做的修改将永久生效, 对于处于终止状态的事物, 该事务对数据库所做的所有修改都会被回滚到没执行该事务之前的状态

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.5V 至 23V、TAS2781RYYR音频放大器、QPF4617TR13 Wi-Fi® 6E非线性前端模块和DRV2667RGPR全集成压电式触觉驱动器

一、TAS2781RYYR,具有集成式音频处理和扬声器保护的 25W、4.5V 至 23V 数字输入 D 类放大器 介绍:TAS2781 是一款单声道、数字输入 D 类音频放大器,专为将高峰值功率高效率驱动到扬声器进行了优化。D类放大器在 18V 电源电压下可向 4Ω 负载…

SpringMVC_异常统一处理

3.全局统一异常处理 3.1目前存在问题 模拟后台出现服务器异常 GetMappingpublic ResultResp list(RequestParam(required false) String name){System.out.println(1/0);List<Item> ret service.lists(name);return ResultResp.success(retnull?Code.PAGE_FAIL:Code.…

JVM快速入门篇

一、JVM探究 1.1前言 请你谈谈你对jvm的理解&#xff1f;Java8虚拟机和之前的变化更新&#xff1f;什么是OOM&#xff1f;什么是栈溢出StackOverFlowError&#xff1f;怎么分析&#xff1f;jvm的常见调优参数有哪些&#xff1f;内存快照如何抓取&#xff1f;怎么分析Dump文件&…

RichView Text Box Items 文本框

RichView Text Box Items 文本框 RichView的文本框&#xff08;Text Box&#xff09;&#xff0c;是TRichView文档中的ITEM之一。 通常文本框项目&#xff08;Text Box Item&#xff09;是旁注的简化版本&#xff0c;该项目插入的位置没有可见的文本。 如果rvoShowSpecialChara…

【数学建模竞赛】数据预处理知识总结1——数据清洗

数据预处理是什么 在数学建模赛题中&#xff0c;官方给所有参赛选手的数据可能受到主观或客观条件的影响有一定的问题&#xff0c;如果不进行数据的处理而直接使用的话可能对最终的结果造成一定的影响&#xff0c;因此为了保证数据的真实性和建模结果的可靠性&#xff0c;需要…

中频炉冷循环监测终端,智能化管理冷却系统的新利器!

在现代工业生产中&#xff0c;中频炉是一种广泛应用于金属加工和熔化的设备。 一、中频炉的降温剂 中频炉的使用中&#xff0c;企业往往关注的是中频炉晶闸管、电抗器、电容器、汇流排以及中频炉线圈&#xff0c;忽观中频炉的冷却水。中频炉的冷却水在中频炉、中频加热炉使用…

ICC2:partial blockage array脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 用法是先在玩加partial blockage array的地方create一个blockage,然后选中source这个脚本。需要定义三个值,分别是blockage的百分比,还有每个组成阵列的每个blockage宽和高。 addHBlkForSpecAre…

【以太网硬件二十一】USXGMII是什么?-Part2

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 目录 PCS功能细节 XGMII到USXGMII的映射 带内配置和状态信号 自协商相关 电气特…

如何修复老照片?老照片修复翻新的方法

老旧照片&#xff0c;尤其是黑白照片&#xff0c;往往因为年代久远、保存方式不当等原因而出现褪色、污损、划痕等问题&#xff0c;会比较难以修复&#xff0c;就算是技术精湛的专业修复师&#xff0c;也是需要投入极大时间精力的&#xff0c;效果也是不可预料的。 修复老照片…

YOLOv5添加注意力机制

添加SE注意力机制 第一步 添加代码-SE类-models/common.py第二步 添加注意力关键词-models/yolo.py第三步 创建配置文件-models/yolov5s_SE.yaml第四步 修改读取配置-train.py 第一步 添加代码-SE类-models/common.py 进入models/common.py文件&#xff0c;这个文件里面包含了…

直线导轨的替换方法

目前&#xff0c;直线导轨的使用率持续上升&#xff0c;已广泛应用在各种各样的行业中&#xff0c;可替换性高是其广泛使用的重要原因之一&#xff01;直线导轨的替换指的就是导轨和滑块可以单出&#xff0c;不用整套替换。 市面上使用率最高的直线导轨品牌应该就是台湾*银了&a…

利用python进行视频下载并界面播放快速下载素材

工具&#xff1a;python designer&#xff08;python自带&#xff09;:UI界面设计工具 VLC&#xff1a;视频播放工具 需要的库如下&#xff1a; import os,platform os.environ[PYTHON_VLC_MODULE_PATH] "./vlc-3.0.14" import vlc from 脚本 import Player from …

Effective Java(中文版第3版)第2条:遇到多个构造器参数时要考虑使用构建器

Effective Java&#xff08;中文版第3版&#xff09;第2条&#xff1a;遇到多个构造器参数时要考虑使用构建器

Unity(三) Shader着色器初探

学习3D开发技术的时候无可避免的要接触到Shader&#xff0c;那么Shader是个什么概念呢&#xff1f;其实对于开发同事来说还是比较难理解的&#xff0c;一般来说Shader是服务于图形渲染的一类技术&#xff0c;开发人员可以通过其shader语言来自定义显卡渲染页面的算法&#xff0…

MyBatis-快速入门

MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发 MyBatis是Apache的一个开源项目iBatis&#xff0c;2010年这个项目由apache迁移到了Google code&#xff0c;并且改名为MyBatis,2013年11月迁移到Github 使用MyBatis查询所有用户信息&#xff1a; 1.准备工作&a…

项目管理工具:实现项目科学管理的利器

什么是项目管理工具 项目管理工具是指用于协助规划、组织、执行和监控项目活动的软件或应用程序。它们提供了一系列功能和工具&#xff0c;帮助项目管理人员和团队有效地管理项目进度、资源分配、任务协作以及沟通等方面的工作。项目管理工具的目标是提高团队的工作效率、优化…

Git 基本原理和常用操作

Git Git 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。 Git 常用操作 git 提交流程&#xff1a;工作区 -> git add 到暂存区 -> gi…

RunnerGo——更高效、更易用的性能测试利器

随着互联网技术的迅速发展&#xff0c;性能测试已成为保障应用程序顺畅运行的关键环节。在众多性能测试工具中&#xff0c;RunnerGo以其独特的优势&#xff0c;逐渐成为了开发者和测试人员的首选。本文将详细介绍RunnerGo的特点&#xff0c;并对比其与JMeter的优势&#xff0c;…

mac开机启动项怎么设置,MAC系统启动项怎么更改

一些软件在安装的时候可能会自动添加开机启动项&#xff0c;如果觉得影响开机速度或者不再需要了该怎么删除开机启动项呢&#xff1f;如何添加删除MacBook的开机启动项。下面小编教大家如何设置开机启动项。 第一步&#xff1a;点击左上角苹果标识下拉菜单进入系统偏好设置 第…

优雅编码!Java与MongoDB的创新数据库架构

随着现代应用程序对数据存储和处理需求的不断增加&#xff0c;开发人员需要寻找更具创新性和灵活性的数据库架构来满足这些需求。在这样的背景下&#xff0c;Java与MongoDB的结合为开发人员提供了一种创新的数据库架构&#xff0c;为应用程序带来了无限可能。下面将探讨Java与M…