【MySQL进阶之路 | 高级篇】事件的ACID特性

打印 上一主题 下一主题

主题 505|帖子 505|积分 1515

1. 数据库事件概述

事件是数据库区别于文件系统的紧张特性之一,当我们有了事件就会让数据库始终保持一致性,同时我们还能通过事件的机制规复到某个时间点,这样可以包管给已提交到数据库的修改不会由于系统崩溃而丢失。
1.1 基本概念

事件:一组逻辑操作单元,使数据从一种状态变换到另一个状态。
事件处置惩罚的原则:包管全部事件都作为一个工作单元来执行,纵然出了故障,都不能改变这种执行方式。当在一个事件中执行多个操作时,要么全部的事物都被提交(commit),那么这么修改都被永久的保存下来;要么数据库管理系统将放弃所作的全部修改,整个事物回滚到(rollback)到最初状态。
案例:
  1. # AA给BB转账100元
  2. update account set money = money - 100 where name = 'AA';
  3. # 服务器故障
  4. 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 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表