论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
物联网
›
物联网
›
【MySQL进阶之路 | 高级篇】事件的ACID特性 ...
【MySQL进阶之路 | 高级篇】事件的ACID特性
写过一篇
金牌会员
|
2024-7-28 07:42:21
|
显示全部楼层
|
阅读模式
楼主
主题
971
|
帖子
971
|
积分
2913
1. 数据库事件概述
事件是数据库区别于文件系统的紧张特性之一,当我们有了事件就会让数据库始终保持一致性,同时我们还能通过事件的机制规复到某个时间点,这样可以包管给已提交到数据库的修改不会由于系统崩溃而丢失。
1.1 基本概念
事件:一组逻辑操作单元,使数据从一种状态变换到另一个状态。
事件处置惩罚的原则:包管全部事件都作为一个工作单元来执行,纵然出了故障,都不能改变这种执行方式。当在一个事件中执行多个操作时,要么全部的事物都被提交(commit),那么这么修改都被永久的保存下来;要么数据库管理系统将放弃所作的全部修改,整个事物回滚到(rollback)到最初状态。
案例:
# AA给BB转账100元
update account set money = money - 100 where name = 'AA';
# 服务器故障
update account set money = money + 100 where name = 'BB';
复制代码
1.2 事物的ACID特性
1). 原子性(atomicity):
原子性是指事件是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。即要么转账成功,要么转账失败,是不存在中间的状态。如果无法包管原子性会怎么样?就会出现数据不一致的情形。A账户减去100元,而B账户增长100元操作失败,系统将无故丢失100元。
2). 一致性(consistency):
根据定义,一致性是指事件执行前后,数据从一个正当性状态变换到别的一个正当性状态。这种状态是语义上 的而不是语法上的,跟详细的业务有关。
那什么是正当的数据状态呢?满意预定的约束的状态叫正当的状态。通俗一点,这状态是由你自己来定义的(比如满意现实世界的约束)。满意这个状态,数据就是一致的,不满意这个状态,数据就是不一致的。如果事件的某个操作失败了,系统就会主动撤销当前正在执行的事件,返回到事件操作之前的状态。
举例:在数据表中我们将姓名字段设置为唯一性约束,这时当事件进行提交大概事件发生回滚时,如果数据表的姓名不唯一,就粉碎了事件的一致性要求。
3). 隔离性(isolation):
事件的隔离性是指一个事件的执行不能被其他事件干扰,即一个事件内部的操作及使用的数据对并发的其他事件是隔离的,并发执行的各个事件之间不能相互干扰。
4). 持久性(durability):
持久性是指一个事件一旦被提交了,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
持久性是通过事件日志来包管的。日志包括了重做日志和回滚日志。当我们通过事件对数据进行修改时,首先先将数据库的变化记录到重做日志,然后再对数据库中对应的行进行修改。这样做的好处是,纵然数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事件具有持久性。
1.3 事件的状态
我们现在知道事件是一个抽象的概念,它实在对应着一个或多个数据库操作,MySQL根据这些擦操作所执行的差别阶段把事件分成几个状态:
活动的(active):事件对应的数据库操作正在执行中时,我们就说该事件处于活动的状态。
部门提交的(partially committed):当事件中的末了一个操作执行完成时,但由于操作都在内存层面上执行,所造成的影响并没有刷新到磁盘上,我们说该事件处于部门提交的状态。
失败的(failed):当事件处于活动的大概部门提交的状态时,可能遇到了某些错误(数据库自身的错误,操作系统错误大概直接断电等)而无法继续执行,大概人为的制止当前事件的执行,我们就说该事件处于失败的状态。
中断的(aborted):如果事件执行的一部门变为失败的状态,那么就需要把已经修改的事件中的操作还原到事件执行前的状态。换句话说,就是要撤销失败事件对当前数据库造成的影响。我们把这个撤销的过程称之为回滚。当归滚操作shiwu执行完毕时,也就是数据库规复到了执行事件的阶段之前的状态时,我们就说该事件处于停止的状态。
提交的(committed)当一个处在部门提交的状态的事件将修改过的数据都同步到磁盘上之后,我们就说该事件处在了提交的状态。
一个基本的状态转换图如下:
图中可见,只有当事件处于提交的大概中断的状态时,一个事件的生命周期才算结束了。对于已经提交的事件来说,该事件对数据库所做的修改将永久生效,对于处在中断状态的事件,该事件对数据库所做的修改都会被回滚到没执行该事件之前的状态。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
写过一篇
金牌会员
这个人很懒什么都没写!
楼主热帖
hibernate入门
kubernetes数据持久化StorageClass动态 ...
回忆我的第一个软件项目
Debian/Ubuntu使用apt安装php8.x
26基于java的电影院售票管理系统设计 ...
Java EnumMap putAll()方法具有什么功 ...
OpenHarmony开源鸿蒙与HarmonyOS商业鸿 ...
管理软件定制公司 广州管理软件定制开 ...
Jvm调优
基于LSTM的多变量多输出温湿度预测 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
网络安全
快速回复
返回顶部
返回列表